Как заполнить фрейм данных из тысяч файлов 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)
Другие вопросы по тегам