【问题标题】:nlminb() does not recognize input data when embebed in foreach()nlminb() 在嵌入 foreach() 时无法识别输入数据
【发布时间】:2017-01-19 16:31:37
【问题描述】:

我想使用 LINUX 机器,使用 foreach 包和包 doMC 提供的多核工具执行蒙特卡罗重采样方案。在每次迭代中,自制函数使用 data.frame X 中包含的替换数据重新采样。结果,我得到了一个包含伪样本的新 data.frame 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,或者至少无法以与嵌入@987654330 时相同的方式管理它@:

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(),可以说,测量X.i 中的行数,我一点问题都没有:

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 

我对@9​​87654336@ 包不熟悉,我在包帮助中找不到解决方案,因此非常感谢您的建议。

我在这里用过:

R 版本 3.3.0 (2016-05-03); doMC 版本 1.3.4; foreach 1.4.3 版; 平台:x86_64-pc-linux-gnu(64位)

【问题讨论】:

    标签: r optimization resampling parallel-foreach


    【解决方案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* }
    

    干杯

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2013-05-28
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多