如何在R中创建长度为n的二维数组(适配NetCDF维度定义需求)
如何在R中创建长度为n的二维数组(适配NetCDF维度定义需求)
嗨,我懂你现在的困扰——想要在R里复刻出Python示例里的那种二维数组,用来给ncdf4包定义NetCDF的维度对吧?其实这事儿没你想的那么复杂,我给你分享几种实用的方法:
方法一:手动直接创建(适合固定已知数值的情况)
如果你已经明确知道数组里的每一个数值,直接用matrix()或者array()函数就能搞定。注意R默认是按列填充元素,所以要加上byrow=TRUE参数让它按行排列,和你Python里的格式保持一致:
# 用matrix创建(本质是二维数组,NetCDF完全兼容) depth_array <- matrix( c(19358, 19388, 19389, 19416, 19417, 19447, 19448, 19477, 19478, 19508, 19509, 19538, 19539, 19569, 19570, 19600, 19601, 19630, 19631, 19661, 19662, 19691, 19692, 19722), nrow = 12, # 指定行数为12 ncol = 2, # 指定列数为2 byrow = TRUE ) # 或者用array函数明确指定维度(结果和上面完全一样) depth_array <- array( c(19358, 19388, 19389, 19416, 19417, 19447, 19448, 19477, 19478, 19508, 19509, 19538, 19539, 19569, 19570, 19600, 19601, 19630, 19631, 19661, 19662, 19691, 19692, 19722), dim = c(12, 2) # 维度参数:行数×列数 )
方法二:拆分起始/结束值再组合(更清晰易维护)
如果你的数组是由一组区间的起始值和结束值组成的,先把这两组值单独定义,再用cbind()组合成二维数组,这样代码可读性更高,后续修改数值也更方便:
# 定义所有区间的起始值 starts <- c(19358, 19389, 19417, 19448, 19478, 19509, 19539, 19570, 19601, 19631, 19662, 19692) # 定义所有区间的结束值 ends <- c(19388, 19416, 19447, 19477, 19508, 19538, 19569, 19600, 19630, 19661, 19691, 19722) # 组合成二维数组 depth_array <- cbind(starts, ends)
适配NetCDF维度的使用示例
创建好数组后,你可以直接把它用到ncdf4的维度定义里,比如用来定义大气分层的上下边界维度:
library(ncdf4) # 定义NetCDF维度 depth_layer_dim <- ncdim_def( name = "depth_layers", units = "m", vals = depth_array, longname = "Lower and upper bounds of atmospheric layers" ) # 之后就可以用这个维度来创建对应的NetCDF变量了
顺带提一句:R里的matrix其实就是特殊的二维array,所以不管用哪种方法创建,都能完美适配ncdf4包的需求,不用纠结类型问题~
备注:内容来源于stack exchange,提问作者user8229029
相关产品推荐
相关产品推荐

