1

我已经用 tk_choose.files 读取了几个 .asc 文件作为光栅层,它们现在在一个列表中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]]))
}

更新:

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

创建栅格列表:

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它的每一层,并将每一层放入一个变量 from x.1tox.i而不知道之前的层数。i代表 中的层数xz.list

4

1 回答 1

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 方法

 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
......

获取值方法

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
......
于 2013-06-26T17:57:30.963 回答