将rasterlayer列表的组件取消列表为单个变量

时间:2013-06-26 16:42:39

标签: r list raster

我已经使用tk_choose.files读了几个.asc文件作为rasterlayer,它们现在位于列表xz.list中:

library(tcltk)
library(raster)

xz.list <- lapply(tk_choose.files(caption = "Choose Layers"), raster)

由于列表中的组件数量取决于读入的.asc文件数量,我正在寻找一种方法来取消列出xz.list每个组件都被写为变量x.1的方法自动x.i。我试了这个没有运气:

for( i in 1:length(xz.list) ){
  assign( paste("x" , i , sep = "." , xz.list[[i]]))
}

UPADATE:

对不起我不清楚的例子。我试着更精确:

创建栅格列表:

xz.list <- lapply(1:5,function(x){
r1 <- raster(ncol=3, nrow=3)
values(r1) <- 1:ncell(r1)
r1
})

现在我想在每个单独的图层中拆分列表:

x.1 <- xz.list[[1]]
x.2 <- xz.list[[2]]

x.i <- xz.list[[i]]

对于来自xz.list的每个图层,输出应如下所示:

x.1
class       : RasterLayer 
dimensions  : 3, 3, 9  (nrow, ncol, ncell)
resolution  : 120, 60  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 1, 9  (min, max)

问题是,xz.list中的图层数随着tk_choose.files选择的图层数而变化。因此,我需要找到一种方法在其每个图层中拆分xz.list,并将每个图层放在x.1x.i的变量中,而不知道之前的图层数。 i代表xz.list中的图层数。

1 个答案:

答案 0 :(得分:2)

由于您没有在可重现的示例中显示,因此不清楚预期的输出。但这有3种可能性。

lapply(xz.list,as.matrix)
lapply(xz.list,getValues)
getValues(stack(xz.list))  ## personally I prefer this one

例如,我将rastes列表设置为:

xz.list  <- lapply(1:5,function(x){
   r1 <- raster(ncol=3, nrow=3)
   values(r1) <- 1:ncell(r1)
   r1
})

然后,堆叠方法

getValues(stack(xz.list))
      layer.1 layer.2 layer.3 layer.4 layer.5
 [1,]       1       1       1       1       1
 [2,]       2       2       2       2       2
 [3,]       3       3       3       3       3
 [4,]       4       4       4       4       4
 [5,]       5       5       5       5       5
 [6,]       6       6       6       6       6
 [7,]       7       7       7       7       7
 [8,]       8       8       8       8       8
 [9,]       9       9       9       9       9

as.matrix method

 lapply(xz.list,as.matrix)
[[1]]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

[[2]]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
......

getValues方法

lapply(xz.list,getValues)
[[1]]
[1] 1 2 3 4 5 6 7 8 9

[[2]]
[1] 1 2 3 4 5 6 7 8 9

[[3]]
[1] 1 2 3 4 5 6 7 8 9
......