为 purrr::map2() 的返回列表的内容赋予不同的对象名称

Giving a different object name for the content of the returned list of purrr::map2()

我正在尝试使用 purrr::map2() 采用两个不同的参数来进行某种计算。

purrr::map2(
  .x = c(1, 3),
  .y = c(10, 20),
  function(.x, .y)rnorm(1, .x, .y)
)

purrr::map2() returns 一个列表,但我想为列表中的每个内容分配一个不同的对象名称。例如,我想将第一个列表 [[1]] [1] -5.962716 命名为 model1,将 [[2]] [1] -29.58825 命名为 model2。换句话说,我想自动化对象命名,如 model* <- purrr::map2[[*]]。有人能告诉我更好的方法吗?

> purrr::map2(
+ .x = c(1, 3),
+ .y = c(10, 20),
+ function(.x, .y)rnorm(1, .x, .y)
+ )
[[1]]
[1] -5.962716
[[2]]
[1] -29.58825

此问题类似于 ,但请注意,出于我的目的,我需要在单独的对象中计算结果。

您可以使用 setNames 将名称分配给结果:

result <- purrr::map2(
  .x = c(1, 3),
  .y = c(10, 20),
  function(.x, .y)rnorm(1, .x, .y)
) %>%
  setNames(paste0('model', seq_along(.)))

现在您可以像这样访问每个单独的对象:

result$model1
#[1] 6.032297

如果您希望它们作为单独的对象而不是列表的一部分,您可以使用 list2env.

list2env(result, .GlobalEnv)