pmap над списками разной длины - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь определить, как можно использовать функцию 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 - это другие glm функциональные входы.

1 Ответ

0 голосов
/ 13 октября 2018

pmap не генерирует все комбинации, она просто применяет функцию к первому элементу каждого элемента списка, затем ко второму и т. Д. Вам необходимо расширить.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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...