在 R 中循环遍历数组的多个切片

loop through multiple slices of an array in R

提问人:Léa Prasin 提问时间:3/28/2023 更新时间:3/28/2023 访问量:45

问:

我正在尝试遍历一个具有多个切片的数组,并希望我的结果每次都显示在相应的切片中(例如,我将向量乘以“m”,我希望向量显示在数组的切片“m”中的特定列中)。 但是,当我这样做时,每次循环时,循环都会覆盖前一个循环,这意味着我只得到最后一个切片和最大 m 的结果。

我用代码创建了一个虚拟数据,这样你就可以看到我要去哪里。有人可以帮我吗?

第一次尝试,更简单的代码:

for(m in 1:3){
array.try <- array(NA,
                     dim=c(8,
                           3,
                           3),
                     dimnames= list(c(1:8),
                                    c("hello", "hi", "man"),
                                    c("sheet", "damn", "hard"))) 


vector.try <- c(1:4)
array.try[,"hello",] <- rep(vector.try, 
                             each = 2) 

vector.try.2 <- c(5:8)
array.try[,"hi",] <- rep(vector.try.2, 
                            each = 2) 
vector.base <- rep(1,8)

array.try[,"man",m] <- vector.base*m
 
}#m
array.try

正如你所看到的,结果都在数组的最后一个切片中,并且是最大的“m”。 最重要的是,我真正想要的更接近于此:

for(m in 1:3){
  for(n in 5:7){
array.try <- array(NA,
                     dim=c(8,
                           3,
                           3),
                     dimnames= list(c(1:8),
                                    c("hello", "hi", "man"),
                                    c("sheet", "damn", "hard"))) 


vector.try <- c(1:4)
array.try[,"hello",] <- rep(vector.try, 
                             each = 2) 

vector.try.2 <- c(5:8)
array.try[,"hi",] <- rep(vector.try.2, 
                            each = 2) 
vector.base[[n]] <- rep(1*n,8) 
#this does not work. my goal is to get something similar as 
#assign(paste("vector.base",n, sep =""), rep(1*n,8))
#because this formulations is annoying and brings all kinds of bugs I read online

end.vector <- c(vector.base[[n]])
#my goal here woulb be to have on vector with all the values 
#of the various vector.base1, vector.base2,....
#so basically c(vector.base1, vector.base2,...)

array.try[,"man",m] <- end.vector*m
  }
}#m
array.try

但我真正需要的主要是解决我的第一个问题,也就是填充数组的每个切片。

多谢!

莫德

R 数组循环 切片

评论

0赞 DaveArmstrong 3/28/2023
在第一个块中,将循环外部的定义移动。正如你现在所拥有的,每次通过循环时,它都会重新定义到它的初始状态。array.tryarray.try
0赞 Léa Prasin 3/28/2023
非常感谢!我的问题是,在我的实际代码中,我定义了在循环本身中创建数组的参数(例如列数和行数)。我该如何处理?
0赞 DaveArmstrong 3/28/2023
如果不看到真正的代码,我不确定到底是什么,但你不能同时覆盖对象(通过在循环中重新定义它)并让它以相同的名称保留。如果数组更改循环每次迭代的维度,您希望如何将一次迭代的结果传播到下一次迭代?
0赞 Léa Prasin 3/28/2023
我理解这个问题。非常感谢您的帮助。我想我必须找到一种方法来重命名矩阵,以便它不会覆盖自己。

答: 暂无答案