Есть ли функция R, которая может передавать элементы списков в качестве аргументов без указания отдельных элементов - PullRequest
3 голосов
/ 11 марта 2020

Существует ли функция R, которая может передавать все элементы списка в качестве аргументов функции?

library(tidyr)
a <- c(1,2,3)
b <- c(4,5,6)
c <- c(7,8,9)
d <- list(a,b,c)
crossing(d[[1]],d[[2]],d[[3]])

Вместо указания d[[1]],d[[2]],d[[3]], я бы хотел просто включить d

Ожидаемый результат:

> crossing(d[[1]],d[[2]],d[[3]])
# A tibble: 27 x 3
   `d[[1]]` `d[[2]]` `d[[3]]`
      <dbl>    <dbl>    <dbl>
 1        1        4        7
 2        1        4        8
 3        1        4        9
 4        1        5        7
 5        1        5        8
 6        1        5        9
 7        1        6        7
 8        1        6        8
 9        1        6        9
10        2        4        7
# ... with 17 more rows

1 Ответ

4 голосов
/ 11 марта 2020

Вы можете использовать от do.call до , чтобы выполнить вызов функции и список передаваемых ей аргументов .

c(d[[1]],d[[2]],d[[3]])
#[1] 1 2 3 4 5 6 7 8 9

do.call("c", d)
#[1] 1 2 3 4 5 6 7 8 9

И для crossing, что не нужно дублировать имена столбцов :

library(tidyr)
names(d) <- seq_along(d)
do.call(crossing, d)
## A tibble: 27 x 3
#     `1`   `2`   `3`
#   <dbl> <dbl> <dbl>
# 1     1     4     7
# 2     1     4     8
# 3     1     4     9
# 4     1     5     7
# 5     1     5     8
# 6     1     5     9
# 7     1     6     7
# 8     1     6     8
# 9     1     6     9
#10     2     4     7
## … with 17 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...