我有以下列表:
lst = list(
cat = c("room","shower","garden"),
dog = c("street", "garden")
)
我会得到输出:
list(
list(
animal="cat",
place ="room"
),
list(
animal="cat",
place ="shower"
),
list(
animal="cat",
place ="garden"
),
list(
animal="dog",
place ="street"
),
list(
animal="dog",
place ="garden"
)
)
目前,我使用下面的代码:
library(plyr)
grasp <- function(animal, places)
{
llply(places, function(u) list(animal=animal, place=u))
}
Reduce(append, Map(grasp, names(lst), lst))
但也许还有更优雅/简洁/更新的东西?
最佳答案
这与 expand.grid
函数的作用非常接近;然而,这会返回一个 data.frame(您可能会考虑使用它)。但是您可以使用
# library(magrittr)
do.call(`expand.grid`, c(lst,stringsAsFactors = FALSE)) %>% split(., 1:nrow(.))
它应该像你想要的那样
关于r - 列表中的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569752/