때 오류 "기능을 찾을 수 없습니다"-의이 AddOne
를 호출하자 - doParallel
패키지를 통해, foreach
및 %dopar%
을 나는 알고 있어요 .packages
및 .export
인수는 foreach
입니다.의 foreach % dopar % 항복 parallelised 할 수있는 기능이 나는 성공적으로 기능을 parallelised 한리스트 요소
제 문제는 "독립 실행 형"기능 대신에 목록의 요소가되도록이 AddOne
을 사용하고 싶습니다.이 경우에는 작동하지 않을 수 있습니다. 특히 AddOne
이 서브 루틴 AddOneSubroutine
을 호출하면 AddOneSubroutine
은 "내 보낸"경우에도 "작업자"환경에서 발견되지 않습니다.
나는 윈도우 10 R.version
수익률을 사용하고 있습니다 :
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 4.1
year 2017
month 06
day 30
svn rev 72865
language R
version.string R version 3.4.1 (2017-06-30)
nickname Single Candle
내가 가진 doParallel 버전은 1.0.10입니다. 다음은 가능한 한 간결하게 문제를 설명하는 코드입니다.
library(doParallel)
if(!exists("Registered")){
registerDoParallel(cores = detectCores(logical = TRUE))
Registered = TRUE
}
AddOne<-function(x){AddOneSubroutine(x)}
AddOneSubroutine <-function(x){x+1}
MyList<-list()
MyList$f<-AddOne
# Not using parallel environments, works correctly when calling AddOne 3 times
Result1 = foreach(i = 1:3) %do% AddOne(i)
Result1
# Not using parallel environments, works correctly when calling MyList$f 3 times
Result2 = foreach(i = 1:3) %do% MyList$f(i)
Result2
# Using parallel environments, works correctly when calling AddOne 3 times,
# despite not explicitly using the .export argument to export AddOneSubroutine
Result3 = foreach(i = 1:3) %dopar% AddOne(i)
Result3
# Using parallel environments, fails when calling MyList$f with error
# "could not find function "AddOneSubroutine"", even though that function is "exported"
Result4 = foreach(i = 1:3,.export = "AddOneSubroutine") %dopar% MyList$f(i)
Result4
무엇을 이해하지 못합니까? 이제
library("doParallel")
cl <- parallel::makeCluster(detectCores(logical = TRUE))
registerDoParallel(cl)
, 나는 많은 세부 사항에 doParallel 백엔드 코드에 파고하지 않은, 그래서 100을 아니에요 :
사방 전체 재현성