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

问题描述

我正在尝试使用purrr::map2()进行两个特定参数的计算。

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

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

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

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

解决方法

您可以使用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)