r - raster::stackApply 仅返回 NA 值
问题描述
我有一个RasterBrick
包含 72 年间隔内每个月一层的平均值。我想获得每年的平均值 - 即返回 72-layer RasterBrick
。
以下代码已在其他类似的栅格上运行,产生了预期的结果(在此处找到):
data <- raster::brick(".../air.mon.mean.nc", varname = "air")
index <- format(as.Date(raster::getZ(data), format = "%Y-%m-%d %H:%M:%S"), format = "%Y")
index <- as.numeric(index)
yearly <- raster::stackApply(data, index, fun = mean)
> yearly
class : RasterBrick
dimensions : 360, 720, 259200, 72 (nrow, ncol, ncell, nlayers)
resolution : 0.5, 0.5 (x, y)
extent : 0, 360, -90, 90 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
source : C:/Users/villar/AppData/Local/Temp/RtmpAbUQQT/raster/r_tmp_2019-08-05_102157_18368_64365.grd
names : index_1948, index_1949, index_1950, index_1951, index_1952, index_1953, index_1954, index_1955, index_1956, index_1957, index_1958, index_1959, index_1960, index_1961, index_1962, ...
min values : NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
max values : NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
但是,在此数据上运行时,它仅返回 NA 值。
fun = function(x, na.rm) {sum(x)/12}
不起作用,添加na.rm = TRUE
.
任何帮助将不胜感激!
数据从这里下载(air.mon.mean.nc)。
解决方案
我不知道为什么raster
会这样。我可以重现它。但是,如果您可以使用CDO,则可以使用运算符yearmean
来获得所需的输出:cdo yearmean input.grb output.grb
. 这也将比使用单核的任何 R 实现更快。
如果您更喜欢呆在 R 中,我建议您看看新的但很棒的stars
包。
你可以这样做:
library(stars)
s = read_stars(s)
yrs = st_get_dimension_values(s, 'time') %>% format('%Y') %>% as.numeric
mymean = function(v, indices, fun = mean, na.rm = FALSE) {
sapply(unique(indices), function(i) fun(v[indices == i], na.rm = na.rm))
}
yearly = st_apply(s, 1:2, mymean, indices = yrs, na.rm = TRUE)
或者,您也可以执行此多核(请参阅 参考资料?st_apply
),但我怀疑它是否会比准系统 CDO 更快。
推荐阅读
- node.js - 使用 Lambda 将文件上传到 AWS S3 不起作用
- sorting - 用于防止玩家获得同一张牌的算法
- java - 保护 Spring Boot REST API
- javascript - 未捕获的类型错误:无法读取未定义的属性“start_time”
- c++ - 使用新位置时,std::construct_at 通过指向 volatile 的指针进行强制转换的目的是什么?
- javascript - 使用纯 javascript 或 jquery 设置 ng-content 的值
- node.js - 从 Watson Discovery 搜索结果中获取相关字段作为 Watson 助手响应
- python - 我在哪里可以找到 tensorflow.keras.experimental 模型中的 export_saved_model 属性?
- javascript - 如何通过推送最旧的元素来逐一显示元素,而新元素将在顶部?
- regex - 匹配以逗号分隔的字符串的不同排列的正则表达式模式