简化在 r 中创建多个世界栅格
Posted
技术标签:
【中文标题】简化在 r 中创建多个世界栅格【英文标题】:simplifying creating multiple world raster in r 【发布时间】:2022-01-13 07:15:36 【问题描述】:我可以使用循环来简化它吗?我需要制作超过 50 个,我目前正在手动完成(例如 r、r1、r2、r3、r4 ...)。
有没有一种方法可以用更简单的代码完成所有 50 项操作?
r <- raster(extent(-180, 180, -90, 90), ncols = 150, nrows = 80)
r1 <- raster(extent(-180, 180, -90, 90), ncols = 150, nrows = 80)
r2 <- raster(extent(-180, 180, -90, 90), ncols = 150, nrows = 80)
【问题讨论】:
有帮助吗? w3schools.com/r/r_for_loop.asp 【参考方案1】:您可以将函数assign
映射到一个序列上:
library(raster)
library(purrr)
my_raster <- raster(extent(-180, 180, -90, 90), ncols = 150, nrows = 80)
seq(50) %>%
walk(~ assign(x = paste0("r", .x), my_raster, envir = globalenv()))
请记住,这会严重扰乱您的全球环境。将栅格分组为一个list
会更简洁:
my_rasters <-
seq(50) %>%
map(~ paste0("my_raster_", .x)) %>%
set_names() %>%
map(~my_raster)
# access one raster
my_rasters$my_raster_23
【讨论】:
list
是什么意思? envir = globalenv() 是做什么的?我试图查找它,但有这个讨论说不要使用它? ***.com/questions/9726705/…
值存储在称为环境的存储桶中。如果您需要在不明确定义环境的情况下从任何地方访问它们,则需要在全局环境中创建它们。我在回答中添加了关于混乱的声明。创建全局变量会产生副作用,因此事情会变得复杂。
如何按list
对它们进行分组?这有什么不同吗?
使用map
代替walk
:my_rasters <- seq(50) %>% map(~ my_raster)
请注意,函数rep
仅适用于S3 对象。
是否可以重命名它们,使输出为 my_raster1、my_raster_2 等。这是 [[1]]以上是关于简化在 r 中创建多个世界栅格的主要内容,如果未能解决你的问题,请参考以下文章
如何在PROC SQL中使用MACRO在SAS中创建连续变量