如何将Matrix添加至Array?R语言数组赋值问题求助
问题:将矩阵添加到数组指定维度的错误解决
问题场景与原代码
想要将一个矩阵添加到数组的第一个维度,尝试了以下代码:
databox<-matrix(1:30998*21,30998, 21) resultemptybox <- array(rep(NA,30998*21*100), dim = c(30998, 21, 99)) resultemptybox[[1]] <- databox # 试图将databox赋值给resultemptybox的第一个维度 resultbox1 <- array(c(databox,resultemptybox), dim = c(30998,21,100))
遇到的问题
- 执行
str(resultbox1)后,结果显示为List of 65095800,结构完全不符合预期; resultemptybox的目标维度并未被成功赋值。
补充示例数据与期望输出
示例数据
databox <- matrix(1:2*3,2,3) resultemptybox <- array(rep(NA,2*3*3), dim = c(2,3,2))
期望输出
> resultbox , , 1 [,1] [,2] [,3] [1,] 3 3 3 [2,] 6 6 6 , , 2 [,1] [,2] [,3] [1,] NA NA NA [2,] NA NA NA , , 3 [,1] [,2] [,3] [1,] NA NA NA [2,] NA NA NA
解决方案
错误原因分析
- 数组索引错误:使用
[[1]]访问数组是取扁平化后的第一个元素,而非第三个维度的第一层,导致赋值无效; - 拼接方式错误:
c(databox, resultemptybox)会将矩阵和数组全部扁平化,破坏原有结构,重新构造数组时数据顺序混乱,甚至出现类型异常。
正确实现方式
方法一:直接赋值到空数组的指定维度
先创建符合最终维度要求的空数组,再将矩阵赋值到目标维度位置:
# 示例数据 databox <- matrix(1:2*3, 2, 3) # 创建维度为(行, 列, 总层数)的空数组 resultbox <- array(NA, dim = c(2, 3, 3)) # 将databox赋值到第三个维度的第1层 resultbox[, , 1] <- databox # 查看结果 resultbox
方法二:沿指定维度合并矩阵与空数组
使用abind包的abind()函数实现维度对齐的合并(需先安装包):
# 安装并加载abind包 install.packages("abind") library(abind) databox <- matrix(1:2*3, 2, 3) resultemptybox <- array(rep(NA, 2*3*2), dim = c(2, 3, 2)) # 沿第三个维度合并矩阵与空数组 resultbox <- abind(databox, resultemptybox, along = 3) # 查看结果 resultbox
内容的提问来源于stack exchange,提问作者marie
相关产品推荐
相关产品推荐

