r - 列表中的笛卡尔积

标签 r functional-programming

我有以下列表:

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(您可能会考虑使用它)。但是您可以使用

转换为 data.frames 列表的列表
# library(magrittr)
do.call(`expand.grid`, c(lst,stringsAsFactors = FALSE)) %>% split(., 1:nrow(.))

它应该像你想要的那样

关于r - 列表中的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569752/

相关文章:

R - ggplot2 - X 轴标签不会显示

r - 控制ggplot图例中的线条颜色和线条类型

types - 同像类型理论

functional-programming - 为什么 array_map 在闭包引发异常时抛出警告?

Haskell 排序函数

r - R 中析因实验的无约束设计矩阵

r - 将一个阿拉伯语句子分成单词会导致不同数量的单词具有不同的功能

r - 查找阈值下任意长度的滚动平均值

r data.table 函数式编程/元编程/语言计算

Scala 合并两个具有不同值类型的映射