R语言提取三维数组每n个时间步后维度错乱如何解决
问题原因
原来的代码存在两个问题:
- R的数组索引从1开始,你写的
seq(0, 360, 3)起始值为0,会导致第一个取值为NA,存在逻辑错误 apply函数的返回维度有固定规则:当你对前两个维度(1:2,即坐标维度)做分组计算时,函数返回的长度为120的时间序列会被作为结果的第一个维度,因此输出维度为c(120,54,71),和预期顺序不符
修正方案
方案1:直接使用数组索引(最优,性能最高)
R的多维数组支持直接按维度位置指定索引,完全不需要使用apply遍历,代码更简洁,运行效率也远高于循环/遍历方案,非常适合处理大体积的气候数据:
# 步长为3,取第1、4...358个时间步,共120个 new.array <- my.array[,, seq(1, 360, 3)] # 如果需要取第3、6...360个时间步,改成seq(3, 360, 3)即可
执行后new.array的维度就是预期的c(54,71,120)。
方案2:保留apply逻辑的调整方法
如果有特殊业务逻辑需要保留apply写法,可以用aperm()函数调整维度顺序:
temp.array <- apply(my.array, 1:2, function(x) x[seq(1, 360, 3)]) new.array <- aperm(temp.array, c(2,3,1))
aperm的第二个参数指定新的维度顺序,这里把原来第2、3位的坐标维度放到最前,把第一位的时间维度放到最后,即可得到符合要求的维度。
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

