将dplyr :: mutate与mapply一起使用时出错

时间:2016-12-22 14:22:35

标签: r dplyr mapply

我想对列表中的两个数据帧中的每一个使用mutate,向第一个列添加z = 3列,向第二个添加z = 4(并返回两个数据帧的列表)。< / p>

dfs <- list(data.frame(x = 1), data.frame(y = 2))
mapply(dplyr::mutate, dfs, z = 3:4, SIMPLIFY = FALSE)
#> Error in lazyeval::lazy_dots(...): Promise has already been forced

对我来说出了什么问题,我该如何去做我想做的事?

2 个答案:

答案 0 :(得分:2)

使用匿名函数:

mapply(function(df, z) mutate_(df, z=z), dfs, 3:4, SIMPLIFY=FALSE)
#[[1]]
#  x z
#1 1 3
#
#[[2]]
#  y z
#1 2 4

答案 1 :(得分:1)

如果您希望留在map2

,也可以使用purrr包中的tidyverse执行此操作
library(purrr)
library(dplyr)

map2(dfs, 3:4, ~ .x %>% mutate(z=.y))
[[1]]
  x z
1 1 3

[[2]]
  y z
1 2 4

您还可以将列表导入map2

dfs %>% map2(3:4, ~ .x %>% mutate(z=.y))