正确使用apply-functions从列表元素组合生成列表

时间:2014-10-13 12:04:25

标签: r list apply

我有一个看起来像这样的列表对象

list1 <- list(c("A1", "A2"), "B", c("C1", "C2"))

由此我想生成一个列表,其中包含list1中所有元素组合的列表。对于list1,它应该看起来像这样

list2 <- list(list("A1", "B", "C1"), list("A1", "B", "C2"), list("A2", "B", "C1"), list("A2", "B", "C2"))

如果list1中有更多元素,则无法手动生成。我如何在R中进行此操作?

1 个答案:

答案 0 :(得分:6)

我会建议一些不同的东西。只需使用expand.grid并获得data.frame组合:

expand.grid(list1)
#   Var1 Var2 Var3
# 1   A1    B   C1
# 2   A2    B   C1
# 3   A1    B   C2
# 4   A2    B   C2

或者,类似地,使用“data.table”,使用CJ

library(data.table)
do.call(CJ, list1)
#    V1 V2 V3
# 1: A1  B C1
# 2: A1  B C2
# 3: A2  B C1
# 4: A2  B C2