这是一个普遍的问题,关于如何(如果可能)使用参数的命名列表(或其他非常通用的解决方案)来通过mapply()矢量化。我试图在这里找到正确的模式,以便可以在许多自定义函数上使用mapply(),而不必在mapply()调用中列出参数名称。一个简单的例子如下:
所需的输出以下代码不使用参数列表
mapply(seq, from = 1:3, to = 3:1)
[[1]]
[1] 1 2 3
[[2]]
[1] 2
[[3]]
[1] 3 2 1
尝试(失败)所需的模式:
from <- 1:3
to <- 3:1
vectorized_arguments <- list(from, to)
names(vectorized_arguments) <- c("from","to")
mapply(seq, vectorized_arguments)
from to
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
[5,] 5 5
[6,] 6 6
[7,] 7 7
[8,] 8 8
[9,] 9 9
答案 0 :(得分:1)
我们可以将do.call
与Map
一起使用
do.call(Map, c(f = seq, vectorized_arguments))
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 2
#[[3]]
#[1] 3 2 1
或mapply
do.call(mapply, c(FUN = seq, vectorized_arguments))
或与pmap
library(purrr)
pmap(vectorized_arguments, seq)