将 lapply 与 R 中两个列表中的数据一起使用

Using lapply with data in two lists in R

我有两个列表,我想使用 lapply 获取一个新列表

数据为

library(dplyr)
list.A <- list(df1=data.frame(x= c(1:5), y = letters[1:5], z= rep(1,5)),
               df2=data.frame(x= c(10:15), y = letters[5:10], z= rep(10,6)))

list.B <- list(df1=data.frame(x= c(1:6), var2 = letters[10:15], var3= rep(7,6)),
               df2=data.frame(x= c(10,12), var2 = letters[1:2], var3= rep(5,2)))

我想要的结果如下

dat.1 <- left_join(list.A[[1]], list.B[[1]], by=("x"))
dat.2 <- left_join(list.A[[2]], list.B[[2]], by=("x"))

new.list <- list(df1 = dat.1, df2 =dat.2)

但是当我使用 lapply 时,结果很奇怪,不像我希望的那样

new.list <- lapply(list.A, function(a){lapply(list.B, function(b){
  df <-left_join(a, b, by=("x"))
})
})

任何帮助,请。我需要应用循环,否则 lapply 会起作用吗? 我的实际列表有很多数据框

我们需要 purrr 中的 map2,因为这会循环遍历两个列表的每个对应元素并执行 left_join by 'x' 列

library(dplyr)
library(purrr)
map2(list.A, list.B, ~ left_join(.x, .y, by = 'x'))

-输出

#$df1
#  x y z var2 var3
#1 1 a 1    j    7
#2 2 b 1    k    7
#3 3 c 1    l    7
#4 4 d 1    m    7
#5 5 e 1    n    7

#$df2
#   x y  z var2 var3
#1 10 e 10    a    5
#2 11 f 10 <NA>   NA
#3 12 g 10    b    5
#4 13 h 10 <NA>   NA
#5 14 i 10 <NA>   NA
#6 15 j 10 <NA>   NA

Map(来自base R

Map(merge, list.A, list.B, MoreArgs = list(all.x = TRUE, by = 'x'))