R:如何使用;获取/分配“;foreach中的函数?

R:如何使用;获取/分配“;foreach中的函数?,r,R,我试图在“foreach”中使用“get/assign”函数。 一个简化的例子如下: a1、a2、a3、…an(n可以是任何预定义的数字)是保存在全局环境中的对象,b是循环中用于存储对象的数组 *更复杂的情况可能是a1、a2、a3、…a是大型矩阵,并尝试使用“get”加索引来检索单元格值,例如get(a1)[index]。“求和”过程可能是基于数组b的更复杂的计算 我的代码是: c <- foreach (j = 1:3) %dopar% { for (i in 1:n){

我试图在“foreach”中使用“get/assign”函数。 一个简化的例子如下:

a1、a2、a3、…an(n可以是任何预定义的数字)是保存在全局环境中的对象,b是循环中用于存储对象的数组

*更复杂的情况可能是a1、a2、a3、…a是大型矩阵,并尝试使用“get”加索引来检索单元格值,例如get(a1)[index]。“求和”过程可能是基于数组b的更复杂的计算

我的代码是:

c <- foreach (j = 1:3) %dopar% {
    for (i in 1:n){
        b[i] <- get(paste("a",i,sep=""))
    }
    sum(b)
}

c我认为在foreach块中使用
get
不一定有问题。这里有两个循环,所以不清楚
b
是在哪里创建的。这对于两个代码块都是如此。而且,
foreach
应该是
foreach(j=1:3)


尝试添加
b在您的案例中,您需要将全局变量导出到每个worker:
registerDoParallel(cl,cores=2);集群出口(cl、c(“a1”、“a2”、“a3”))
您完全没有理由使用
get
assign
ai
应该放在一个数据结构中,而不是分开。嗨@Roland,很抱歉这里的混乱,这只是一个简化的例子。如果每个a都是一个大矩阵(如光栅图像),而i是共注册矩阵的数量(i根据操作员的设置而不同),您是否仍建议将这些矩阵组合在一起并发送到foreach?如果您希望迭代对象,请将它们放在一个列表中,然后迭代该列表<代码>获取
分配
仅在您对环境进行复杂操作时才需要,这显然超出了您的专业水平。
for (j in 1:3) {
    for (i in 1:3){
        b[i] <- get(paste("a",i,sep=""))
    }
    c[i] = sum(b)
}
library(foreach)
a1 <- 1
a2 <- 2
a3 <- 3
c <- foreach(j=1:3) %dopar% {
    b <- c()
        for (i in 1:3) {
            b[i] <- get(paste("a",i,sep=""))
        }
    sum(b)
}