【发布时间】: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,它会起作用。但是计算时间相当长。