在R中使用apply或for循环用于数组

时间:2013-12-18 21:13:06

标签: r loops

我有一个函数,它会在执行时产生一个3 dim数组。当函数执行多次时,我需要保存所有单独的矩阵。

因此,在第一次执行期间,输出是一个数字,如dim 10,20,30。然后我想在1 dim中将每个矩阵保存为1:10。然后再次执行该函数,产生一个新的数组dim 10,20,30,然后循环(或apply)将再次循环1:10并保存所有矩阵。我最初尝试在for循环中使用[[]]进行索引,但随后将其保存为列表并且数组变得不可用。即使它不是一个完整的解决方案,我也非常感谢任何帮助。我真的不知道该怎么做

1 个答案:

答案 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进行换行时,可以将每个这些存储在列表中。

请注意foreachfor的语法差异:首先,i = 1:10代替i in 1:10,其次是%do%。如果你正在嵌套foreach循环,这很重要:

foreach(i = 1:10) %:% 
  foreach(j = 1:10) %do% {
   # do thing
}