是否有一个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

最佳答案

您可以使用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

10-08 18:28