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