我正在尝试确定如何使用应用于不同长度列表的dplyr
pmap
函数。
以下是我想做的一个非常简单的例子
list_1 <- list(1, 2, 3)
list_2 <- list(1, 2)
list_3 <- list(1, 2, 3, 4, 5)
pmap(list(list_1, list_2, list_3), ~ ..1 + ..2 + ..3)
上面的结果将是一个长度为length(list_1) * length(list_2) * length(list_3)
的列表,其中包含3个列表的所有组合的总和。
我的实际应用有点复杂,因为我试图拟合glm
模型,其中list_1
是响应list_2
,而list_3
是其他{{1} }函数输入。
答案 0 :(得分:4)
pmap
不会生成所有组合,它只是将一个函数应用于每个列表元素的第一个元素,然后应用第二个,依此类推。您需要expand.grid(或类似的东西)
l.combs <- expand.grid(list_1, list_2, list_3)
l.combs[] <- lapply(l.combs, unlist)
rowSums(l.combs)
或与pmap
library(tidyverse)
l.combs <- expand.grid(list_1, list_2, list_3)
pmap(l.combs, ~ ..1 + ..2 + ..3)
编辑:这是一个glm
的示例,该示例“有效”但在统计上显然是无稽之谈
list_1 <- replicate(3, runif(10), simplify = F)
list_2 <- replicate(2, runif(10), simplify = F)
list_3 <- replicate(5, runif(10), simplify = F)
l.combs <- expand.grid(list_1, list_2, list_3)
pmap(l.combs, ~ glm(..1 ~ ..2 + ..3))