我想使用LINUX機器,使用由foreach軟件包和軟件包doMC提供的多核工具,進行montecarlo重新採樣。在每次迭代中,一個自制功能用包含在data.frame X
中的替換數據重新採樣。因此,我得到一個新的data.frame X.i
包含僞樣本,該僞樣本用作使用nlminb()
(目標函數= F_1
)的優化過程的輸入數據。我使用標準for()
命令有沒有問題:nlminb()在嵌入foreach時不識別輸入數據()
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"
我不知道問題出在哪裏,但我想它一定是用的東西怎麼foreach()
具體相關,和nlminb()
互動,因爲如果我跑foreach()
用一個簡單的功能,可以說,衡量在西安的行數,我根本沒有問題:
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
包,我沒能找到的一個解決方案包幫助,所以我會很感激你的建議。
我這裏使用的:
ř版本3.3.0(2016年5月3日); doMC版本1.3.4; foreach版本1.4.3; (64位)