ときにエラー「機能を見つけることができません」 - さんはAddOne
それを呼びましょう - doParallel
パッケージを経由して、foreach
と%dopar%
を、私はよく知っています.packages
と.export
の引数はforeach
です。のforeach%dopar%得並列化する機能は、私が正常に機能を並列化しましリスト要素
私の問題は、「スタンドアロン」機能ではなく、リストの要素であることを願っています。この場合、私は機能しません。具体的には、AddOne
がサブルーチンAddOneSubroutine
を呼び出す場合、AddOneSubroutine
は、「エクスポート」されているにもかかわらず、「ワーカー」環境では見つかりません。
私は、Windows 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
私は何を理解していませんか?どこでも完全な再現性のために