将13×15×1000的3D数组转为195×3×1000格式时遇下标错误求助
问题分析与解决
错误原因
你遇到的下标错误本质是数据结构不匹配:
as.data.frame(as.table(nulls.qs[,,i]))返回的是3列195行的数据框netfun.nulls.qs[,,i]是一个195×3的二维数组切片
直接将数据框赋值给数组切片时,R会默认把数据框按列展平为一维向量,导致数组切片的二维结构无法匹配一维向量的赋值逻辑,触发下标错误。
修正方案
方案1:修改for循环,转换数据结构后赋值
将数据框转为矩阵再赋值,确保维度完全匹配:
netfun.nulls.qs <- array(0, dim = c(195, 3, 1000)) for (i in 1:1000) { # 先转成数据框,再转为矩阵适配数组切片的结构 temp_matrix <- as.matrix(as.data.frame(as.table(nulls.qs[,,i]))) netfun.nulls.qs[,,i] <- temp_matrix }
方案2:用apply函数替代for循环(更高效)
利用apply对数组的第三个维度批量处理,再调整维度顺序:
# 对每个13×15的矩阵生成三列矩阵,返回的数组维度为1000×195×3 temp_array <- apply(nulls.qs, 3, function(x) as.matrix(as.data.frame(as.table(x)))) # 调整维度为目标的195×3×1000 netfun.nulls.qs <- aperm(temp_array, c(2, 3, 1))
内容的提问来源于stack exchange,提问作者shasha
相关产品推荐
相关产品推荐

