Как извлечь несколько файлов netcdf (каждый файл является наблюдением) в один файл output.csv? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать CSV-файл со всеми наблюдениями WRF за месяц июль (всего 744 наблюдения или 744 строки). Однако мой код выполняется только для одного файла за раз, и окончательный выходной файл .csv - это всего лишь одна строка. Я запускаю мой R Script на терминале. Я помню, как использовал звездочку после первой части имени файла, но на этот раз она не работает. Например, все файлы начинаются с одного и того же имени "wrfout_d04_2013-05-01", и мне нужно было бы только поставить (*) рядом с ним, чтобы он мог работать над всеми файлами, начинающимися с тем же именем.

 #!/usr/bin/env Rscript

 ## This script will read ncdf4 encoded WRF output files and extract
 ## variables T2, RAINC and RAINNC for pairs of Lat, Lon given in a 
 csv
 ## file.
 ##
 ## Usage:
 ##
 ##     $ ./extract_for_validation.R weather_stations.csv 
   wrfout_d04_2013-05-01_00\:00\:00 output.csv
 ##
 ## Where
 ## - "weather_stations.csv" contains pairs of Lat, Lon in rows
 ## - wrfout_d04_2013-05-01_00\:00\:00 is a ncdf4 encoded file 
  output by WRF
 ## - output.csv is where triads of T2, RAINC, RAINNC will be saved, 
    in
 ##   a single row, one for each pair of Lat, Lon given at input
 ##

 library(ncdf4)
 library(ncdf4.helpers)

  args <- commandArgs(TRUE)

  estaciones <- read.csv(args[1])
  climate_output <- nc_open(args[2])

  lon <- ncvar_get(climate_output, varid = "XLONG")
  lat <- ncvar_get(climate_output, varid = "XLAT")
  temp <- ncvar_get(climate_output, varid = "T2")
  pp0 <- ncvar_get(climate_output, varid = "RAINC")
  pp1 <- ncvar_get(climate_output, varid = "RAINNC")

  date <- tail(strsplit(args[2], "_")[[1]], n=2)[1]
  time <- tail(strsplit(args[2], "_")[[1]], n=2)[2]

   out <- c(c(date, time))

 for (x in 1:length(estaciones[,1])){
    column <- match(round(estaciones[x ,1], digits=2), 
    round(lat[1,], digits=2))
    row <- match(round(estaciones[x, 2], digits=2), round(lon[,1], 
    digits=2))
    out <- append(out, (c(temp[row, column], pp0[row, column], 
    pp1[row, column])))
    }

    write.table(t(unlist(out)), file=args[3], row.names=FALSE, 
    col.names=FALSE)

Как мне расширить его, чтобы он одновременно работал со всеми 744 файлами netcdf и создавал один файл output.csv со всеми 744 наблюдениями?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...