2016-07-20 9 views
1

Я новый программист. Недавно мне дали 1850 файлов .nc, которые я подмножал до 480 файлов. У каждого имени файла есть номер, указывающий месяц. Все, что я хочу сделать, это:открыть несколько .nc, а затем написать несколько растровых

  1. открыть все .NC файлы
  2. написать все .NC файлы в растровом формате
  3. среднее всех растровых файлов в 12 файлов, по одному на каждый месяц.

Я знаю, что это не должно быть сложно, но у меня проблемы. До сих пор я не получил мимо шаг 2:

library(RNetCDF) 
library(raster) 
library(rgdal) 

files=list.files(pattern='*.nc', full.names=TRUE) 

for (i in seq_along(files)){ 
nc=open.nc(files[i])} 

list(nc) 

for(i in 1:length(nc)){ 
    rnc<-raster(nc[i]) 
    writeRaster(rnc, filename=names(rnc), bylayer=TRUE, format="GTiff")} 

Как вы можете сказать, я еще новичок/студент R, я думаю, что у меня есть шаг 1 OK, для цикла на шаге 2 не похоже, работают. Как только я получу 1 и 2, я смогу работать на 3 (если вы все увидите простой ответ для шага 3, пожалуйста, поделитесь).

спасибо.

+0

Ваша конечная цель - рассчитать среднемесячное значение вправо? Будет ли лучше/быстрее использовать пакеты «RNetCDF» или «ncdf4» для чтения всех значений точки сетки ([здесь] (http://lukemiller.org/index.php/tag/oisst/)), вычислить означают затем извлечение в таблицы с латами, длинными и средними значениями. После этого довольно просто создать растровые сетки из сгенерированных таблиц. – Tung

+0

Да, все, что я хочу, это вычислять среднемесячные значения по всем 480 файлам. я посмотрел на ваш сценарий, но, к сожалению, мне было тяжело следовать за ним. есть ли простой способ сделать это, используя петли для открытия .nc, а затем либо цикл for для вычисления среднего значения на основе имени файла (например, пропустите шаг 2 и перейдите к шагу 3), либо цикл for для записи на растровый а затем усреднение? – gren

+0

Они не мои. [Этот] (http://lukemiller.org/index.php/2011/03/extracting-sea-surface-temperatures-from-noaas-oisstv2/) немного легче следовать. Я попытаюсь начать с этого – Tung

ответ

2

Вы можете сделать что-то вроде этого:

library(raster) 
library(ncdf4) 
files <- list.files(pattern='*.nc', full.names=TRUE) 

Либо:

s <- stack(files) 
rnc <- writeRaster(s, filename="x", bylayer=TRUE, format="GTiff")} 

Или с петлей:

for (f in files) { 
    r <- raster(f) 
    fout <- extension(f, '.tif') 
    r <- writeRaster(r, filename=fout, datatype='FLT4S') 
} 

Чтобы получить среднемесячные, вы можете сделать что-то вроде:

months <- stackApply(s, 1:12, mean) 

Предполагая, что файлы находятся в правильном порядке.