【问题标题】:Outer loop variable in nested R foreach loop嵌套 R foreach 循环中的外循环变量
【发布时间】:2012-03-29 07:01:51
【问题描述】:

我正在尝试在嵌套循环中使用 foreach 包,但我的内部循环无法识别外部的计数器,我错过了什么?

v3 <- search.compounds.by.mass(100.05,0.5)
foreach(j=2:length(v2)) %:% {
    foreach(i=1:length(v3), .combine=rbind) %dopar% {
        write.table(paste(v3[i], paste(get.reactions.by.compound(v3[i]), collapse=" "), sep=" "), "file1",quote=FALSE, row.names=FALSE, col.names=FALSE, append=TRUE)
        write.table(paste(v3[i], paste(get.pathways.by.compounds(v3[i]), collapse=" "), sep=" "), "file2",quote=FALSE, row.names=FALSE, col.names=FALSE, append=TRUE)
        v3 <- search.compounds.by.mass(v2[j],0.5)
    }
}

【问题讨论】:

  • 错误信息是什么?此外,变量 v2 中的内容(您可以使用 dput(v2) 以便我们重现它)

标签: r foreach


【解决方案1】:

问题是您错误地应用了%:% 运算符。它旨在合并两个foreach 对象,从而生成一个foreach 对象,该对象可用于重复评估您提供给它的任何表达式。因此,如果您想使用%:%,您需要首先合并两个foreach() 语句,然后然后使用生成的对象来驱动对@的单个调用987654326@(或者在你的情况下,%dopar%)。有关示例,请参见下面的 (1)

或者,如果您想嵌套两个foreach() 对象,请使用%do% 两次,如下面的(2) 所示。

任何一种方式都可以,但对于并行作业,我可能更喜欢使用%:% 的那个。不过,您的代码就像下面的 (3) 一样,将两种策略的元素结合在一起,产生了一个无能为力的混合体。

X <- c("A", "B")
Y <- 1:3

## (1) EITHER merge two 'foreach' objects using '%:%' ...
foreach (j = X, .combine = c) %:% foreach(i = Y, .combine = c) %do% {
    paste(j, i, sep = "")
}
# [1] "A1" "A2" "A3" "B1" "B2" "B3"


## (2) ... OR Nest two 'foreach' objects using a pair of '%do%' operators ...
foreach(j = X, .combine = c) %do% {
    foreach(i = Y, .combine = c) %do% {
        paste(j, i, sep = "")
    }
}
# [1] "A1" "A2" "A3" "B1" "B2" "B3"


## (3) ... BUT DON'T use a hybrid of the approaches.
foreach(j = X, .combine = c) %:% {
    foreach(i = Y, .combine = c) %do% {
        paste(j, i, sep = "")
    }
}
# Error in foreach(j = X, .combine = c) %:% { : 
#   "%:%" was passed an illegal right operand

【讨论】:

  • 很高兴听到。顺便说一句,如果您想了解更多有关如何构建嵌套循环的一些决策,请在 R 命令行中键入 vignette("nested")
  • 令人痛苦的是,小插图显示了正确的方法,并明确指出它是二元运算符,但很容易犯这个错误。
猜你喜欢
  • 2018-07-15
  • 2019-07-13
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多