Как заполнить фрейм данных из тысяч файлов ncdf, используя цикл for?
Я пытаюсь открыть тысячи файлов 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 ответ
Решение
nc_close()
должен применяться к самому объекту nc, а не к имени файла. Т.е. к "Объекту класса ncdf4 (как возвращено либо функцией nc_open, либо функцией nc_create."
Итак, вы должны использовать
nc_close(ncdata)