为什么NCO::ncra的平均值与terra::tapp()的不同?

o8x7eapl  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(84)

我有一个.nc文件包含全年的每日数据,我试图计算每个月的平均值。
我尝试使用netCDF Operator (NCO)提供的linux命令ncra,命令行是:

# initial date for month
        days_start <- seq(as.Date("2000-01-01"), length = 12, by = "months")
        days_end <- seq(as.Date("2000-02-01"), length = 12, by = "months") - 1
        
        # monthly mean
        for(m in 1:12){
          system(paste0('ncra -O -d time,"', days_start[m], '","', days_end[m], '" ', idir, df$fList[i], ' ', odir_m, 'monthly_', m, '.nc'))
        }

结果似乎没有什么问题,因为输出文件的时间戳是每个月的中间日期。然而,当我使用terra::tapp(daily_nc, indices2, fun = mean)仔细检查我的结果时,似乎ncra得到了不同的平均值
| NCO::ncra|terra::tapp|
| --------------|--------------|
| 256.7218|256.7506|
indices2是这样生成的:

r <- rast(file.path)
indices <- format(time(r), format = "%m") |> as.double()
igetnqfo

igetnqfo1#

NCO的行为几乎与上面@Robert Wilson的评论一样。除非另有说明,否则NCO会将磁盘类型转换为双精度,进行算术运算,然后转换回输入/输出类型。如果terra::tapp方法以不同的方式处理数据,这可以解释差异。

相关问题