2014-09-08 2 views
3

누군가 내 프로그램에서이 오류가 발생하는 이유를 이해할 수 있도록 도와주십시오.R 클러스터 내보내기 오류 "개체를 찾을 수 없습니다."

여기서 볼 수 있듯이 "pay.freq"는 분명 환경의 일부이므로 왜 찾을 수 없습니까? 문법은 문제없이 찾을 수있는 "ts"와 동일합니다.

큰 공은 부분적으로 단어 기능을 작동 시키며, 작은 원은 부분적으로 음모를 포함합니다.

Screenshot of error

cf.pro <- function(t=0,Tb=T,r=Y, k=1, PRFlag="P", freq="w",plot=0){ #Beregner exposure for alle tidspunkter med udgangspunkt 
    ts <- seq(0,30,1/52) 
    pay.freq <- if(toupper(freq)=="W"){1}else #bestemmer hvor ofte der sker betalinger 
    if(toupper(freq)=="Q"){13}else 
     if(toupper(freq)=="H"){26}else 
     if(toupper(freq)=="Y"){52}else print("Fejl i frequency input") 

    library('parallel') 
    cl <- makeCluster(7) 
    clusterEvalQ(cl,source("C:/Users/Marcus/Documents/CBS/Speciale/Data/Global data.R")) 
    clusterEvalQ(cl,source("C:/Users/Marcus/Documents/CBS/Speciale/Data/Swappriser.R")) 
    clusterEvalQ(cl,source("C:/Users/Marcus/Documents/CBS/Speciale/Data/Interest simulation.R")) 
    clusterEvalQ(cl,source("C:/Users/Marcus/Documents/CBS/Speciale/Data/Survival sim.R")) 
    clusterEvalQ(cl,source("C:/Users/Marcus/Documents/CBS/Speciale/Data/Exposures.R")) 
    clusterExport(cl,"ts") 
    clusterExport(cl,"pay.freq") 

cf.pro <- parSapplyLB(cl,1:n, function(j){ #Beregner exposure serie n gange 
    if (k==1) k=Swap(t=0,Ta=0,Tb=Tb,r=r[,j]) 
    sapply(ts,function(i){Exposure.cf(t=i,Tb=Tb,r=r[,j], k=k, PRFlag=PRFlag, pay.freq=pay.freq)}) #beregner exposure for alle tidspunkter 
    }) 
    stopCluster(cl) 

    if (plot==1) { 
    tss <- seq(t, Tb, dt) 
    matplot(tss, cf.pro[,1:n], type="l", lty=1, main="Exposure Profiles", ylab="Exposure") 
    lines(tss,rowMeans(cf.pro), lty=1, lwd=3) 
    } 
    return(cf.pro) 
} 

CF.pro.w=cf.pro(t=0,Tb=T,r=r, PRFlag="P", freq="w", plot=1) 

답변

5

당신이 clusterExport 문서를 살펴 경우 전화는 당신이 볼 수 있듯이, 기본 환경은 당신이하려고하는 변수를 찾기 위해

clusterExport(cl, varlist, envir = .GlobalEnv) 

다음 수출은. 글로벌 이네.

함수 내에서 내보내기를 수행 중이며 pay.freq의 범위는 GlobalEnv가 아니라 함수의 로컬 환경입니다. 그러나 clusterExport에 함수의 환경을 지정하지 않았으므로 clusterExport는 GlobalEnv를 찾으며 pay.freq를 찾지 않습니다.

나는 이것이 당신의 문제이고, pay.freq가 현재 당신의 환경에서 나타나기를 바랄 것이다. 아마 당신이 테스트하기 위해 코드를 한줄 씩 따라 갔기 때문일 것이다. 나는 당신의 환경을 깨끗하게하고 clusterExport에 함수 환경을 지정함으로써 코드를 다시 실행하려고 시도했다.

어떻게 진행되는지 알려주세요. 문제가 좀 더 미묘한 부분이라면 해결할 수 있습니다. 이것은 질문을 보는 것에서의 첫 번째 생각이었습니다.

+2

제 생각에는 ClusterExport (cl, "ts")는 함수 환경 내에서만 존재하기 때문에 오류가 발생하지 않습니다. ClusterExport (cl, list ("ts", "pay.freq"), envir = environment()) 으로 바 꾸었습니다. – Marcus

관련 문제