我有一个函数,它会在执行时产生一个3 dim数组。当函数执行多次时,我需要保存所有单独的矩阵。
因此,在第一次执行期间,输出是一个数字,如dim 10,20,30。然后我想在1 dim中将每个矩阵保存为1:10。然后再次执行该函数,产生一个新的数组dim 10,20,30,然后循环(或apply)将再次循环1:10并保存所有矩阵。我最初尝试在for循环中使用[[]]进行索引,但随后将其保存为列表并且数组变得不可用。即使它不是一个完整的解决方案,我也非常感谢任何帮助。我真的不知道该怎么做
答案 0 :(得分:0)
我认为您正在寻找的是abind
库中的abind
函数。我不确定您是否可以指定应用的组合方式,因此我们将使用foreach
包中的foreach
。
因此,这将允许您将二维矩阵组合成三维数组:
library(abind)
library(foreach)
# Helper function, we want to bind along the third dimension?
abind3 <- function(...) { abind(along = 3, ...) }
result <- foreach(i = 1:10, .combine=abind3) %do% {
# Generate each matrix here
matrix(i, 10, 10)
}
如果要执行多次执行,当使用for循环/ lapply / foreach进行换行时,可以将每个这些存储在列表中。
请注意foreach
与for
的语法差异:首先,i = 1:10
代替i in 1:10
,其次是%do%
。如果你正在嵌套foreach循环,这很重要:
foreach(i = 1:10) %:%
foreach(j = 1:10) %do% {
# do thing
}