【发布时间】:2017-03-20 01:17:21
【问题描述】:
考虑一个混合类列表,例如从 boxplot 返回的内容。我想连接每个列表元素,水平堆叠每对元素。
(我单击了所有“类似问题”并进行了搜索,但不知道执行此操作的基本功能,modifyList 相似但不完全是我想要的。我还快速浏览了包rlist,但没有什么让我觉得相似。this question/answer 也相似,但仅适用于矢量)
f <- function(x) boxplot(mpg ~ vs, data = x, plot = FALSE)
(bp1 <- f(mtcars[mtcars$vs == 0, ]))
# $stats
# [,1]
# [1,] 10.40
# [2,] 14.70
# [3,] 15.65
# [4,] 19.20
# [5,] 21.00
#
# $n
# [1] 18
#
# $conf
# [,1]
# [1,] 13.97416
# [2,] 17.32584
#
# $out
# [1] 26
#
# $group
# [1] 1
#
# $names
# [1] "0"
(bp2 <- f(mtcars[mtcars$vs == 1, ]))
# $stats
# [,1]
# [1,] 17.8
# [2,] 21.4
# [3,] 22.8
# [4,] 30.4
# [5,] 33.9
#
# $n
# [1] 14
#
# $conf
# [,1]
# [1,] 18.99955
# [2,] 26.60045
#
# $out
# numeric(0)
#
# $group
# numeric(0)
#
# $names
# [1] "1"
这个想法是将上面的两个列表组合成一个简单地完成以下操作的列表:
(bp <- f(mtcars))
# $stats
# [,1] [,2]
# [1,] 10.40 17.8
# [2,] 14.70 21.4
# [3,] 15.65 22.8
# [4,] 19.20 30.4
# [5,] 21.00 33.9
#
# $n
# [1] 18 14
#
# $conf
# [,1] [,2]
# [1,] 13.97416 18.99955
# [2,] 17.32584 26.60045
#
# $out
# [1] 26
#
# $group
# [1] 1
#
# $names
# [1] "0" "1"
【问题讨论】:
-
对于
mtcars示例,至少,您可以只使用tmp <- lapply(1:length(bp1), function(x) cbind(bp1[[x]], bp2[[x]])); names(tmp) <- names(bp1)。不过,它并不是超级强大。使用c(list, recursive = TRUE)进行展平和重构将适用于更复杂的结构,但工作量会大得多。 This question,真的。
标签: r