如何用R循环编写几个rasterStack

时间:2019-02-26 02:01:44

标签: r loops stack ncdf4

我在一个文件夹中有几个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 :(得分:0)

您想要执行print(ff[i])而不是print(ff)

ffRaxterStackff[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)