我已经使用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.1
到x.i
的变量中,而不知道之前的图层数。 i
代表xz.list
中的图层数。
答案 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
......