为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