如何在列表中合并列表向量的成员

时间:2019-08-08 03:49:00

标签: r list

我有以下列表列表:

nfoo <- list(a = list(x = 1:3, y = 11:13), b = list(x = 1:3, y = 100:102))

它看起来像这样:

 > nfoo
$a
$a$x
[1] 1 2 3

$a$y
[1] 11 12 13


$b
$b$x
[1] 1 2 3

$b$y
[1] 100 101 102

我要做的是将列表与列表合并,结果:

$a
[1] 1 2 3 11 12 13

$b
[1] 1 2 3 100 101 102

我该如何实现?

7 个答案:

答案 0 :(得分:3)

我们可以将lapplyunlist一起使用

lapply(nfoo, unlist, use.names = FALSE)

#$a
#[1]  1  2  3 11 12 13

#$b
#[1]  1   2   3 100 101 102

使用purrr,我们可以使用mapflatten.*

library(purrr)
map(nfoo, flatten_int)

答案 1 :(得分:2)

如果我们知道foo的每个子列表包含向量xy(对于本示例中的示例来说是正确的),则:

lapply(foo, with, c(x, y))

给予:

$a
[1]  1  2  3 11 12 13

$b
[1]   1   2   3 100 101 102

答案 2 :(得分:1)

lapplydocall和连接功能(也适用于列表)一起使用:

output <- lapply(nfoo, function(x) do.call(c, x))
output

$a
x1 x2 x3 y1 y2 y3 
 1  2  3 11 12 13 

$b
 x1  x2  x3  y1  y2  y3 
  1   2   3 100 101 102 

答案 3 :(得分:1)

使用lapply遍历您的列表,然后使用unlist将每个列表向量化:

lapply(nfoo, unlist)

答案 4 :(得分:1)

library(tidyverse)
nfoo%>%map(unlist)

# $a
# x1 x2 x3 y1 y2 y3 
#  1  2  3 11 12 13 
# 
# $b
#  x1  x2  x3  y1  y2  y3 
#   1   2   3 100 101 102 

答案 5 :(得分:1)

为完整性起见,还有另一种变体在Reduce()中使用lapply()

lapply(nfoo, Reduce, f = c)
$a
[1]  1  2  3 11 12 13

$b
[1]   1   2   3 100 101 102

答案 6 :(得分:1)

使用do.call

Map(do.call, nfoo, w="c")
# $a
# x1 x2 x3 y1 y2 y3 
#  1  2  3 11 12 13 
# 
# $b
# x1  x2  x3  y1  y2  y3 
#  1   2   3 100 101 102