Map()和dplyr加入

时间:2017-05-15 17:28:16

标签: r dplyr mapply

我有两个列表,两个列表都包含与不同年份对应的类似数据集。我希望逐个元素地合并两个列表中的数据集。当我在mapply旁边使用dplyr::full_join时,在变量名称不匹配的实例中,我需要使用by参数,R无法执行连接。

library(dplyr)
set.seed(100)

first_list <- list(data.frame(x = 1:3, y = rnorm(3)), 
                   data.frame(x = 4:6, y = rnorm(3)))

second_list <- list(data.frame(z = 1:3, w = rnorm(3)), 
                    data.frame(z = 4:6, w = rnorm(3)))

Map(full_join, by = c("x" = "z"), first_list, second_list)
#Error: 'z' column not found in rhs, cannot join

然而,

Map(function(x, y) full_join(x, y, by = c("x" = "z")), first_list, second_list)

成功运作。我很好奇这种行为,并想知道是否有人可以提供一些解释。

1 个答案:

答案 0 :(得分:3)

由于Mapmapply的包装,因此使用其 MoreArgs 参数,而其他必需的args(...)包含要向量化的列表(请参阅{{ 1}}):

?mapply