我已经成功地并行化的功能 - 我们称之为AddOne
- 通过doParallel
包,foreach
和%dopar%
和我很熟悉.packages
和.export
自变量为foreach
。的foreach%dopar%屈服“找不到函数”的错误时要并行化的功能列表元素
我的问题是,我想AddOne
,而不是一个“独立”功能,是一个列表的元素,在这种情况下,我不能让事情工作。具体而言,如果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
我什么都不明白?