如何使用for循环从数千个ncdf文件填充数据帧?

时间:2019-01-21 19:33:08

标签: r for-loop ncdf4

我正在尝试打开数千个netcdf文件,并将数据拉到可以另存为csv文件的数据框中。

因此,在将所有ncdf文件名作为列表放入一个csv文件中之后,我最终使用此代码创建了一个数据帧,其中填充了ncdf文件中的数据。

vec0 <- vector()
time <- c(vec0,1:28413)

vec1 <- vector()
temp <- c(vec1,1:28413)

vec2 <- vector()
sphum <- c(vec2,1:28413)

vec3 <- vector() 
rain <- c(vec3,1:28413)

vec4 <- vector()
totprcp <- c(vec4,1:28413)

for (i in 1:length(filenames))
  {ncdata=nc_open(filenames[i]) 

 nctime=ncvar_get(ncdata,"time") 
  time[i] = nctime[1]

nctemp=ncvar_get(ncdata,"Tair_f_inst") 
  temp[i] = nctemp[1]

 nchum=ncvar_get(ncdata,"Qair_f_inst")
  sphum[i] = nchum[1]

  ncrain=ncvar_get(ncdata,"Rainf_tavg") 
  rain[i] = ncrain[1]

  ncprcp=ncvar_get(ncdata,"Rainf_f_tavg")
  totprcp[i] = ncprcp[1]
  nc_close(filenames[i])}

  cbind(time,temp,sphum,rain,totprcp)

但是我仅获得第一行的准确数据,并为其余行填充一系列数字(1到28412)。我认为我的错误在于我编写代码的nc_close组件的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

nc_close()应该应用于nc对象本身,而不是文件名。即“ ncdf4类的对象(由函数nc_open或函数nc_create返回。”

因此,您应该使用

nc_close(ncdata)