为for循环中的列表元素赋值,列表名称取决于循环
Assigning value to list elements in for loop, list names depending on loop
我有以下问题。我正在使用两个 for 循环(运行 在 i 和 j 上)并使用 assign 函数创建名称取决于 i 和 j 的列表。现在,在带有两个循环的另一个 for 循环中,我想用栅格填充我创建的列表,即 19 个栅格。但是,我无法调用我的列表,因为它们依赖于 i 和 j,因此,我无法填充它们。
最后,我想要 25 个列表,其中包含名称 rasterList_10N_010E、rasterList_20N_010E...,每个列表都有 19 个条目和各自的栅格。
下面是我的代码。我删除了对我的问题不重要的行(我实际上也根据循环内的 i 和 j 生成了我想存储在列表中的栅格)。
for(i in 1:5){
for(j in 1:5){
nam <- paste0("rasterList_", i*10, "N_0", j*10, "E")
assign(nam, list())
for (k in 1:19){
raster_test <- raster(ncol=36, nrow=18, xmn=-1000, xmx=1000, ymn=-100, ymx=900)
#here the list with the name nam should be standing
rasterList_10N_010E[[k]] <- raster_test
}
}
}
我尝试过使用
的解决方案
eval(as.name(nam))[[k]] <- raster_test
和
as.name(nam)[[k]] <- raster_test
但是没有用。我认为问题可能在于该方法不是很像 R(我最近刚从 Stata 更改为 R)?
谢谢!
与其创建 25 个单个列表,我建议将您的列表放入一个列表中,如下所示:
注意:为了简单起见,我设置了 k = 2
。
library(raster)
#> Loading required package: sp
rasterList <- list()
for (i in 1:5) {
for (j in 1:5) {
name <- paste0(i * 10, "N_0", j * 10, "E")
rasterList[[name]] <- list()
for (k in 1:2) {
raster_test <- raster(ncol = 36, nrow = 18, xmn = -1000, xmx = 1000, ymn = -100, ymx = 900)
rasterList[[name]][k] <- raster_test
}
}
}
length(rasterList)
#> [1] 25
rasterList[["10N_010E"]]
#> [[1]]
#> class : RasterLayer
#> dimensions : 18, 36, 648 (nrow, ncol, ncell)
#> resolution : 55.55556, 55.55556 (x, y)
#> extent : -1000, 1000, -100, 900 (xmin, xmax, ymin, ymax)
#> crs : NA
#>
#>
#> [[2]]
#> class : RasterLayer
#> dimensions : 18, 36, 648 (nrow, ncol, ncell)
#> resolution : 55.55556, 55.55556 (x, y)
#> extent : -1000, 1000, -100, 900 (xmin, xmax, ymin, ymax)
#> crs : NA
如果仍然需要,您之后可以像这样获得 25 个列表:
lapply(names(rasterList), function(x) assign(paste0("rasterList_", x), rasterList[[x]], envir = .GlobalEnv))
由 reprex package (v2.0.1)
创建于 2022-01-05
我有以下问题。我正在使用两个 for 循环(运行 在 i 和 j 上)并使用 assign 函数创建名称取决于 i 和 j 的列表。现在,在带有两个循环的另一个 for 循环中,我想用栅格填充我创建的列表,即 19 个栅格。但是,我无法调用我的列表,因为它们依赖于 i 和 j,因此,我无法填充它们。
最后,我想要 25 个列表,其中包含名称 rasterList_10N_010E、rasterList_20N_010E...,每个列表都有 19 个条目和各自的栅格。
下面是我的代码。我删除了对我的问题不重要的行(我实际上也根据循环内的 i 和 j 生成了我想存储在列表中的栅格)。
for(i in 1:5){
for(j in 1:5){
nam <- paste0("rasterList_", i*10, "N_0", j*10, "E")
assign(nam, list())
for (k in 1:19){
raster_test <- raster(ncol=36, nrow=18, xmn=-1000, xmx=1000, ymn=-100, ymx=900)
#here the list with the name nam should be standing
rasterList_10N_010E[[k]] <- raster_test
}
}
}
我尝试过使用
的解决方案eval(as.name(nam))[[k]] <- raster_test
和
as.name(nam)[[k]] <- raster_test
但是没有用。我认为问题可能在于该方法不是很像 R(我最近刚从 Stata 更改为 R)?
谢谢!
与其创建 25 个单个列表,我建议将您的列表放入一个列表中,如下所示:
注意:为了简单起见,我设置了 k = 2
。
library(raster)
#> Loading required package: sp
rasterList <- list()
for (i in 1:5) {
for (j in 1:5) {
name <- paste0(i * 10, "N_0", j * 10, "E")
rasterList[[name]] <- list()
for (k in 1:2) {
raster_test <- raster(ncol = 36, nrow = 18, xmn = -1000, xmx = 1000, ymn = -100, ymx = 900)
rasterList[[name]][k] <- raster_test
}
}
}
length(rasterList)
#> [1] 25
rasterList[["10N_010E"]]
#> [[1]]
#> class : RasterLayer
#> dimensions : 18, 36, 648 (nrow, ncol, ncell)
#> resolution : 55.55556, 55.55556 (x, y)
#> extent : -1000, 1000, -100, 900 (xmin, xmax, ymin, ymax)
#> crs : NA
#>
#>
#> [[2]]
#> class : RasterLayer
#> dimensions : 18, 36, 648 (nrow, ncol, ncell)
#> resolution : 55.55556, 55.55556 (x, y)
#> extent : -1000, 1000, -100, 900 (xmin, xmax, ymin, ymax)
#> crs : NA
如果仍然需要,您之后可以像这样获得 25 个列表:
lapply(names(rasterList), function(x) assign(paste0("rasterList_", x), rasterList[[x]], envir = .GlobalEnv))
由 reprex package (v2.0.1)
创建于 2022-01-05