2017-01-19 63 views
0

我想使用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位)

回答

1

我自己發現了這個問題,只是想分享它,以防有人陷入同一個問題。經過多次試用後,我意識到問題出在我如何定義F_1。最初,我指定了以下功能:

F_1<-function(par,...){*some calculations involving par and X.i* } 

使用,...將X.i傳遞給函數。這在其他例程中總是適用於我。該解決方案來簡單地通過改變功能的標題中這樣說:

F_1<-function(par,X.i){*some calculations involving par and X.i* } 

乾杯