doRNG
을 등록 할 때 함수 내에서 dopar
을 실행하는 문제가 발생하여 함수 내부에서 생성 된 변수에 액세스해야합니다.변수를 찾을 수 없습니다.
내 전체 목표는 doRNG
을 사용하여 병렬 처리가 임의의 숫자 스트림을 갖도록하는 것이므로 더 좋은 방법이 있다면 내 문제도 해결할 것입니다.
환경이 병렬 프로세스로 내보내지는 방식을 이해하려고 시도하기 때문에 doRNG
이 실패하는 이유에 대해 2 차적으로 관심이 있습니다.
이 코드는 약간 고안된 것처럼 보입니다. 그러나 이것은 훨씬 더 크고 복잡한 코드를 요약 한 것입니다.
library(doParallel)
library(foreach)
cl <- makePSOCKcluster(2)
registerDoParallel(cl)
#if I comment out these two lines, code runs fine
library(doRNG)
registerDoRNG()
gVar <- 'gVar'
cols <- matrix(1:10,nrow=2)
res <- apply(cols,2,
function(col) {
lclVar <- sum(col)
res <- foreach(i=icount(2),
.export=c('gVar'), #'lclVar'
.combine='c') %dopar% { #change to %do% also works
return(sprintf('%s %s %s',gVar,lclVar,i))
}
return(res)
})
print(res)
stopCluster(cl)
참고 doRNG
행을 주석 처리하면 코드가 올바르게 실행됩니다. 또한 %dopar%
에서 %do%
으로 변경되고 (doRNG
행은 주석 처리되지 않음) 작동합니다. 여기
Error in { : task 1 failed - "object 'lclVar' not found"
'% dopar % '대신'% dorng %'를 사용하면 오류가 발생하지 않습니다. 그걸 시험해 봤어? –
@ J_F 실제로 내 문제가 수정되었습니다. 그래서 어떻게 든 도파르가 도롱뇽에 싸여있을 때와 같은 방식으로 환경이 전달되지 않고 있습니까? 어쨌든이 문제에 대한 빠른 수정이었습니다. 감사합니다! –