pmap 不同长度的列表

Ste*_*eno 2 r dplyr purrr

我试图确定如何使用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)
Run Code Online (Sandbox Code Playgroud)

其中上面的结果将是一个长度列表,length(list_1) * length(list_2) * length(list_3)其中包含 3 个列表的所有组合的总和

我的实际应用程序有点复杂,因为我试图拟合响应和其他函数输入的glm模型。list_1list_2list_3glm

Ice*_*can 6

pmap不会生成所有组合,它只是将函数应用于每个列表元素的第一个元素,然后是第二个元素,依此类推。您需要 Expand.grid (或类似的)

l.combs <- expand.grid(list_1, list_2, list_3)
l.combs[] <- lapply(l.combs, unlist)
rowSums(l.combs)
Run Code Online (Sandbox Code Playgroud)

或者与pmap

library(tidyverse)
l.combs <- expand.grid(list_1, list_2, list_3)
pmap(l.combs, ~ ..1 + ..2 + ..3)
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个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))
Run Code Online (Sandbox Code Playgroud)