【问题标题】:Problems calling function in foreach loop in r在r中的foreach循环中调用函数的问题
【发布时间】:2017-04-18 15:16:12
【问题描述】:

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

建议我在并行内核上运行循环,我找到了函数 foreach 和 doSnow 库。我已经能够使用发布在不同 r-blogs 和 stack-overflow 上的简单示例,并在我的计算机上运行它们。但到目前为止,我自己编写的函数存在问题。

我收到以下错误:

{ 中的错误:任务 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 函数中来使其工作,但这肯定不是最佳方式。

关于如何解决我的问题有什么建议吗?

【问题讨论】:

  • 也许你的问题在simulation(c(lambda_1[3],lambda_0[3],delta[3],alpha[kk],var[3],mean_abil[3]))[4]这一行。你确定delta[3] 存在吗?
  • delta 向量有 100 个条目,因此存在 delta[3]。我可以在 foreach 循环之外运行simulation 而不会出现任何问题。
  • 如果您将foreach 替换为for 是否可以正常工作?
  • 是的,如果我使用 for 而不是 foreach,它会起作用。但是计算时间相当长。

标签: r foreach


【解决方案1】:

我认为您应该在 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]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多