在 R 中展平、追加和重新列出列表

Flatten, append, and relist a list in R

我在 R 中有两个列表列表,我想加入一个列表列表并保留原始结构。考虑以下示例:

library(tidyverse)
library(dplyr)
library(purrr)

a <-  data.frame(c("MA", "V", "UDR"), stringsAsFactors=FALSE)
b <-  data.frame(c("MMM", "AAPL"), stringsAsFactors=FALSE)
c <-  data.frame(c("MO", "ABT", "XYZ", "Q"), stringsAsFactors=FALSE)
d <-  data.frame(c("AA", "NEM", "LUV"), stringsAsFactors=FALSE)

lst1 <- list(list(a), list(b))
lst2 <- list(list(c), list(d))

我会撒谎创建一个 lst3,其中 appends/joins 个字符包含在子列表 'a' 和 'c' 以及 'b' 和 'd' 中。

我想要的结果是:

lst3 <- list(list(data.frame(c("MA", "V", "UDR", "MO", "ABT", "XYZ", "Q"))), list(data.frame(c("MMM", "AAPL", "AA", "NEM", "LUV"))))

我认为下面的代码很接近,但我不太明白。

lst3 <- map(1:2, function(x) {
  append(flatten(lst1[[x]]), flatten(lst2[[x]]))
})

我们可以使用Map循环相应的list元素,unlist并创建一个嵌套的data.frame

Map(function(x, y) list(data.frame(col1 = c(unlist(x, 
          use.names = FALSE), unlist(y, use.names = FALSE)))), 
    lst1, lst2)

您还可以使用 purrr

中的 map2
map2(lst1, lst2, ~unname(c(unlist(.x), unlist(.y))))
# [[1]]
# [1] "MA"  "V"   "UDR" "MO"  "ABT" "XYZ" "Q"  
# 
# [[2]]
# [1] "MMM"  "AAPL" "AA"   "NEM"  "LUV"