Как заполнить фрейм данных из тысяч файлов ncdf, используя цикл for? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь открыть тысячи файлов 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 голосов
/ 23 января 2019

nc_close() следует применять к самому объекту nc, а не к имени файла. То есть to "Объект класса ncdf4 (возвращаемый либо функцией nc_open, либо функцией nc_create."

Итак, вы должны использовать

nc_close(ncdata)
...