简化在 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 代替walkmy_rasters &lt;- seq(50) %&gt;% map(~ my_raster) 请注意,函数rep 仅适用于S3 对象。 是否可以重命名它们,使输出为 my_raster1、my_raster_2 等。这是 [[1]]

以上是关于简化在 r 中创建多个世界栅格的主要内容,如果未能解决你的问题,请参考以下文章

eclipse中工作集的创建,简化项目组分类

如何在PROC SQL中使用MACRO在SAS中创建连续变量

有没有一种方法可以基于for循环中匹配的文件名在r中创建列表?

如何在informix中创建触发器?

如何简化下面的 SQL 并提高性能?

多线程