我有以下数据列表.
Input <- list(c("1", "2"), c("3", "4"), c("5", "6", "7"))
我想从每个列表元素中提取一个项目,并将它们组合成一个向量.然后,从每个列表元素中的其余项目中,我想重复这个过程,从每个列表元素中提取另一个项目,并将它们组合到另一个向量中.我想重复这些步骤,直到达到某个预定值(本例中为2;2是最大值,因为它恰好是Input
个列表中每个列表元素的最小长度).
有很多可能的方法可以做到这一点,我希望找到一种可以返回所有可能性的方法,如下面的Output
个列表.我并不真正关心输出的形式,只要它包含相同的信息.
Output <- lapply(list(rbind(as.character(c(1, 3, 5)), as.character(c(2, 4, 6))), rbind(as.character(c(1, 3, 5)), as.character(c(2, 4, 7))), rbind(as.character(c(1, 3, 6)), as.character(c(2, 4, 5))), rbind(as.character(c(1, 3, 6)), as.character(c(2, 4, 7))), rbind(as.character(c(1, 3, 7)), as.character(c(2, 4, 5))), rbind(as.character(c(1, 3, 7)), as.character(c(2, 4, 6))), rbind(as.character(c(1, 4, 5)), as.character(c(2, 3, 6))), rbind(as.character(c(1, 4, 5)), as.character(c(2, 3, 7))), rbind(as.character(c(1, 4, 6)), as.character(c(2, 3, 5))), rbind(as.character(c(1, 4, 6)), as.character(c(2, 3, 7))), rbind(as.character(c(1, 4, 7)), as.character(c(2, 3, 5))), rbind(as.character(c(1, 4, 7)), as.character(c(2, 3, 6)))), function (x) {
lapply(as.data.frame(t(x)), function (y) {
y
})
})
这个例子很小.实际上,我可能会有更多的组(Input
个列表中的列表元素)和每个组中的更多元素,并且组的大小可能与我的示例中的不同.是否有一种高效的编程方式来执行此操作?我很想看到一个使用base
个函数的解决方案,但我对任何事情都持开放态度.expand.grid()
函数不起作用,因为它没有考虑我的分组变量.