【问题标题】:simplifying creating multiple world raster in r简化在 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)

【问题讨论】:

标签: r loops for-loop raster


【解决方案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() 是做什么的?我试图查找它,但有这个讨论说不要使用它? stackoverflow.com/questions/9726705/…
  • 值存储在称为环境的存储桶中。如果您需要在不明确定义环境的情况下从任何地方访问它们,则需要在全局环境中创建它们。我在回答中添加了关于混乱的声明。创建全局变量会产生副作用,因此事情会变得复杂。
  • 如何按list 对它们进行分组?这有什么不同吗?
  • 使用map 代替walkmy_rasters &lt;- seq(50) %&gt;% map(~ my_raster) 请注意,函数rep 仅适用于S3 对象。
  • 是否可以重命名它们,使输出为 my_raster1、my_raster_2 等。这是 [[1]]
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2021-07-14
  • 1970-01-01
  • 2019-03-10
  • 2013-03-30
相关资源
最近更新 更多