如何将四个向量组合成dim=c(2,2,6)的三维数组?(R语言场景)
把四个向量组合成2x2x6三维数组的方法
嘿,这事儿不难!我给你两种常用的实现方式,你可以根据自己的习惯选:
首先先把你的初始代码放这儿,方便后续测试:
a <- 1:6; b <- seq(0.2,8,length.out = 6); set.seed(1); d <- runif(6, 0, 1); e <- rnorm(6, 0, 1)
方法一:基础循环法(适合新手理解)
先初始化一个指定维度的空数组,然后逐个填充每个2x2矩阵切片:
# 创建一个2行、2列、6个切片的空数组,初始值为NA result_array <- array(NA, dim = c(2, 2, 6)) # 循环遍历每个索引,填充对应的矩阵 for (i in 1:6) { # 把a[i]、d[i]作为第一列,b[i]、e[i]作为第二列构造矩阵 # 如果想按行填充(第一行a[i],b[i],第二行d[i],e[i]),可以加byrow=TRUE参数 result_array[,,i] <- matrix(c(a[i], d[i], b[i], e[i]), nrow = 2) }
方法二:用purrr包的函数式编程(更简洁)
如果你习惯用tidyverse风格的代码,可以用purrr::map生成所有矩阵的列表,再转成三维数组:
library(purrr) # 生成包含6个2x2矩阵的列表 matrix_list <- map(1:6, ~ matrix(c(a[.x], d[.x], b[.x], e[.x]), nrow = 2)) # 将列表转换为三维数组 result_array <- simplify2array(matrix_list)
验证结果
你可以用result_array[,,1]查看第一个切片的矩阵,应该是这样的:
[,1] [,2] [1,] 1.0000000 0.2000000 [2,] 0.2655087 -0.6264538
完全符合你的需求——每个切片都由对应位置的a、b、d、e元素组成。
内容的提问来源于stack exchange,提问作者shuquanliu
相关产品推荐
相关产品推荐

