小编DSH*_*DSH的帖子

R 在 purrr::map() 中提取对象名称

我正在尝试提取 purrr::map() 中映射的对象的名称。这是问题的一个简化示例。

library(tidyverse)

input <- list(df1 = mtcars, df2 = iris)

map(input, ~ deparse(substitute(.x)))
Run Code Online (Sandbox Code Playgroud)

我的 SO 搜索让我想到了“deparse(subsitute()”技巧。但在这个例子中,它返回

$df1
[1] "..1"

$df2
[1] "..1"
Run Code Online (Sandbox Code Playgroud)

而不是我想要的,即

df1
[1] "df1"

$df2
[1] "df2"
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要能够在更复杂的 lambda 函数中处理列表中的对象名称。

预先感谢您的任何帮助。

r purrr

5
推荐指数
1
解决办法
1331
查看次数

R 在 purrr::map 中使用 dplyr::mutate() 而不复制行

这是数据:

library(tidyverse)
col_pre <- c('a', 'b', 'c')
df <- tibble(a1 = 1:3, a2 = 4:6, b1 = 7:9, b2 = 10:12, c1 = 13:15, c2 = 16:18)
Run Code Online (Sandbox Code Playgroud)

我想使用purrr::map()dplyr::mutate()创建三个新列,它们是df. 我可以map()用来迭代 a、b、c 列前缀的向量。我想出了这些tidyeval操作,以便下面的代码可以正常运行。

out <- col_pre %>%
  map_df(~ df %>% 
            mutate(!!as.name(paste0(.x, '3')) := !!as.name(paste0(.x, '1')) + !!as.name(paste0(.x, '2')))
  )
Run Code Online (Sandbox Code Playgroud)

但是,out现在有六个伪行:

     a1    a2    b1    b2    c1    c2    a3    b3    c3
1     1     4     7    10    13    16     5    NA    NA
2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr tidyeval

3
推荐指数
1
解决办法
218
查看次数

标签 统计

purrr ×2

r ×2

dplyr ×1

tidyeval ×1