通过使用with,尝试打开包含有15个变量的5维空间的NetCDF数据。(计算变量在矩阵1000X920中)
这个问题实际上和之前的其他问题是一样的。
起初我使用RNetCDF包,但经过一些试验,当包读取我的数据时,我发现不一致。最后更好地使用了ncdf软件包。
在单个文件中打开数据没有问题,但是在错误地尝试在文件夹中循环一个特定变量(例如: var no 15)超过100个数据后,程序失败了。
> days = formatC(001:004, width=3, flag="0")
> ncfiles = lapply (days,
> function(d){ filename = paste("data",d,".nc",sep="")
> open.ncdf(filename) })
同样,当我为一个特定的变量尝试这样的命令时
> sapply(ncfiles,function(file,{get.var.ncdf(file,"var15")})
所以我的问题是,任何用特殊变量读取所有netcdf文件的解决方案,然后在一个框架内进行计算。因为在整个netcdf数据上生成变量15而失败。
谢谢你对这个问题的任何解决方案。
更新:
这是我做的最后一件事
当我写
library(ncdf)
files=list.files("allnc/",pattern='*nc',full.names=TRUE)
for(i in seq_along(files)) {
nc <- lapply(files[i],open.ncdf)
lw = get.var.ncdf(nc,"var15")
x=dim(lw)
(df,data.frame(lw))->df }
我可以通过> nc获取所有netcdf数据。
因此,我如何能够自动获得新名称的变量数据,比如lw1,lw2...etc,我无法应用
var1 <- lapply(files, FUN = get.var.ncdf, variable = "var15")
然后我可以用所有的数据来计算。
我尝试的另一种技术是使用RNetCDF包进行循环。
# Declare data frame
df=NULL
#Open all files
files= list.files("allnc/",pattern='*.nc',full.names=TRUE)
# Loop over files
for(i in seq_along(files)) {
nc = open.nc(files[i])
# Read the whole nc file and read the length of the varying dimension (here, the 3rd dimension, specifically time)
lw = var.get.nc(nc,'DBZH')
x=dim(lw)
# Vary the time dimension for each file as required
lw = var.get.nc(nc,'var15')
# Add the values from each file to a single data.frame
}
我可以获得一个变量数据,但我只是从我的所有文件nc得到一个数据。注:我的数据名为sampe ( data20150102001.nc,data20150102002.nc.....etc)
发布于 2015-02-27 12:52:29
发布于 2017-09-20 20:24:51
您可以使用CDO的集成统计功能,但请注意,在某些系统中,文件数量仅限于256个:
cdo ensmean data20150102*.nc ensmean.nc
您可以将“平均”替换为您所选择的统计量,max、std、var、min等。
https://stackoverflow.com/questions/28771109
复制相似问题