我想使用 LINUX 机器,使用 foreach 包与包 doMC 提供的多核设施进行蒙特卡罗重采样方案。在每次迭代中,自制函数使用 data.frame 中包含的替换数据重新采样X
。结果,我得到了一个包含伪样本的新 data.frame ,它用作使用(target function= )X.i
优化过程的输入数据。使用标准命令我没有问题:nlminb()
F_1
for()
B=10 # number of iterations in the for(), foreach() loops
ll<-numeric(B) # vector containing the objective value from nlminb() at iteration i.
for (i in 1:B){
X.i<-f_bwhv(X,resampling=T)
ll[i]<-nlminb(par,F_1,X.i=X.i)$objective
}
ll
[1] 55160.06 65839.87 50232.35 74536.11 73489.52 80321.76 61646.76 61899.84 76774.73 74138.7
但是,我无法申请foreach()
,因为它似乎nlminb()
无法识别输入数据X.i
,或者至少无法以与嵌入时相同的方式管理它for()
:
doMC::registerDoMC(cores=2)
ll.foreach<-foreach(i=1:B,.packages = c("stats","plyr"),.combine = c) %dopar% {
X.i<-f_bwhv(X,resampling=T)
nlminb(par,F_1,X.i=X.i)$objective
}
Error in { : task 1 failed - "object 'X.i' not found"
我不知道问题出在哪里,但我想它一定是与 howforeach()
和nlminb()
interact 相关的东西,因为如果我foreach()
用一个简单的函数运行,比如说,测量 Xi 中的行数,我完全没有问题:
nrows.foreach<-foreach(i=1:B, .packages = c("stats","plyr"), .combine = c) %dopar% {
X.i<-f_bwhv(X,resampling=T)
nrow(X.i)
}
nrows.foreach
118 118 116 116 118 117 116 115 108 113
我对foreach
包不熟悉,也未能在包帮助中找到解决方案,因此非常感谢您的建议。
我在这里用过:
R版本3.3.0(2016-05-03);doMC 版本 1.3.4;foreach 1.4.3 版;平台:x86_64-pc-linux-gnu(64位)