如何使用 for 循环从数千个 ncdf 文件中填充数据框?
How to populate data frame from thousands of ncdf files using a for-loop?
我正在尝试打开数以千计的 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 组件的方式。有什么想法吗?
nc_close()
应该应用于 nc 对象本身,而不是文件名。 IE。至 "An object of class ncdf4 (as returned by either function nc_open or function nc_create."
所以,你应该使用
nc_close(ncdata)
我正在尝试打开数以千计的 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 组件的方式。有什么想法吗?
nc_close()
应该应用于 nc 对象本身,而不是文件名。 IE。至 "An object of class ncdf4 (as returned by either function nc_open or function nc_create."
所以,你应该使用
nc_close(ncdata)