Как написать несколько RasterStack в цикле с R - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть несколько файлов ncdf в папке.Я хотел бы сложить их по отдельности в цикл и распечатать их информацию в R.

У меня есть следующий код:

library(raster)
library(ncdf4)

c <- list.files(pattern="nc")
for (i in 1:length(c)){
   ff <- stack(c[i])
   print(ff[i])
}

, набрав ff [1] в командной строке, яОжидается получить это:

class       : RasterStack 
dimensions  : 444, 922, 409368, 10  (nrow, ncol, ncell, nlayers)
resolution  : 0.0625, 0.0625  (x, y)
extent      : 235.375, 293, 25.125, 52.875  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
names       : X1, X2, X3, X4, X5, X6, X7, X8, X9, X10 

но я получаю следующее:

X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
[1,] NA NA NA NA NA NA NA NA NA  NA
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
[1,] NA NA NA NA NA NA NA NA NA  NA

Я не вижу, где моя ошибка.Спасибо за любую помощь.

1 Ответ

0 голосов
/ 26 февраля 2019

Вместо print(ff[i]) вы хотите сделать print(ff).

ff - это RaxterStack.ff[i] даст вам значения ячейки i.

((Если вы хотели слой j, вы можете сделать ff[[j]]))

Избегать c в качестве имени переменной (это также функция).Я бы сделал

library(raster)
ff <- list.files(pattern="nc")
for (i in 1:length(ff)) {
   s <- stack(ff[i])
   print(s)
}

или лучше

for (i in 1:length(ff)) {
   b <- brick(ff[i])
   print(b)
}

или, возможно, так:

library(raster)
ff <- list.files(pattern="nc")
lapply(ff, brick)
...