2013-06-10 2 views
0

표준 오류를 예상하기 위해 최적화 기능을 부트 스트랩하려면 boot을 사용하고 있습니다. 불행히도 드문 경우이지만 최적화 함수가 boot 함수를 중지시키는 오류를 반환합니다. 오류는 추정에 중요하지 않으며 그 반복을 건너 뛰고 다음으로 넘어 가고 싶습니다.시도하거나 tryCatch 부팅시 R

trytryCatch으로 해결 방법을 찾으려고했지만 올바르게 사용할 수 없었습니다. statistic 내에 최적화 함수를 래핑 할 때 오류를 건너 뛸 수있었습니다. 그러나 이로 인해 boot 사이의 예상 수가 초기 반복 수보다 작아지고 오류가 반환됩니다.

내 코드의 기본적인 예는 어떤 도움

bootfun = function(bootdata, i, d, C1) { 
    C1 = cov (bootdata[i]) 
    ans = constrOptim(...) #This function returns an error 
    return(ans$par [d]) 
} 
bootres = boot(bootdata, statistic = bootfun, 500) 

편집, 감사

을 감사

이하 : 내 문제에 대한 수용 가능한 해결책을 찾기 위해 관리했다. 그러나 함수가 오류를 자주 발생시키는 경우 각 오류가 부트 스트랩 복제를 NA로 바꿈으로써 허용되지 않을 수 있습니다.

bootfun = function(bootdata, i, d, C1) { 
C1 = cov(bootresid[i]) 
tryCatch({ 
ans = constrOptim(...) 
return(ans$par[1:18] [d]) }, 
error=function(err) {rep(NA,18)}) 
} 
+1

'try' 또는'tryCatch'가 에러를 얻었을 때 함수의 리턴 값을 어떻게할까요? – Thomas

+0

@Thomas 이전에 오류 메시지가 반환되었습니다. NA를 반환하는 것이 적절할까요? 내가 아는 바로는, 부팅은 오류를 대신 할 무언가가 필요합니다. – LoganH

+0

오류를 재생산 한 일부 샘플 데이터를 포함시킬 수 있습니까? – SchaunW

답변

0

이 특정 코드에 대한 답변,하지만 당신이 설명하는 상황에 tryCatch의보다 일반적인 데모 없습니다. 당신은 단순히 오류가 발생 항목을 제거하려면 다음 함수 반환 오류에 아무것도가 없다면 것은 결과에서 NULL 값을 제거 :

testfun <- function(i) { 
tryCatch({ 
d <- rbinom(1,1,.3) # generate an error 30% of the time 
if(d==1) 
    error("test stop") 
else 
    return(1:10) # return your actual values 
}, 
error = function(err) {return()} # return NULL on error 
    ) 
} 

x <- sapply(1:20, FUN=testfun) # run demo 20 times 
x <- x[-(which(sapply(x,is.null),arr.ind=TRUE))] 
# when errors happen, x is shorter than 20 

마지막 행은 (: https://stackoverflow.com/a/3336726/2338862를이 기준) 목록에서 NULL 항목을 제거합니다 .

관련 문제