在r

时间:2017-04-18 15:16:13

标签: r foreach

我正在运行200次模拟,改变我的六个参数中的一个并仅使用标准r设置和正常for循环。这需要2个小时。变量我变化。

我建议在并行内核上运行循环,然后找到函数foreach和doSnow库。我已经能够使用在不同的r-blog上发布的简单示例和堆栈溢出并在我的计算机上运行它们。但到目前为止,我自己的书面功能存在问题。

我收到以下错误:

  

{:任务1失败 - "对象' delta'找不到"

这是描述函数的通用代码:

  simulation <- function(x){
  #Parameter guesses

  alpha <- x[1]
  mean_ability <-x[2]
  delta <- x[3]
  var <- x[4]      
  lambda_0 <- x[5]
  lambda_1 <- x[6]



HERE THE SIMULATION PART IS DONE


#Put moments together 

c(lam_1_hat,lam_0_hat,delta_hat,mean_within,between_var,average_wage)

}

我把这个函数放在foreach函数中:

foreach(kk=1:length(alpha_vec), .combine = 'c',.packages=#the packages...) %dopar% {

simulation(c(lambda_1[3],lambda_0[3],delta[3],alpha[kk],var[3],mean_abil[3]))[4]
}

所以我在这种情况下保持每个元素都被修复,除了alpha。

在模拟部分期间,我计算随机数。 set seed命令在foreach循环之外定义。我试图包含它,但错误是一样的。

我还尝试使用foreach-package中的.package规范来包含我使用的包。

它可以通过在foreach函数中包含整个函数代码来使其工作,但这肯定不是最佳方式。

有关如何解决问题的建议吗?

1 个答案:

答案 0 :(得分:0)

我认为您应该在foreach循环中包含另一个参数,即.export

赞:

foreach(kk=1:length(alpha_vec), .combine = 'c',.packages=c(the packages), .export= c("simulation")) %dopar% {

simulation(c(lambda_1[3],lambda_0[3],delta[3],alpha[kk],var[3],mean_abil[3]))[4]
}