mapply 以向量列表作为参数进行向量化

mapply with list of vectors as arguments to vectorize over

这是一个关于如何(如果可能)使用参数的命名列表(或其他非常通用的解决方案)通过 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

我们可以使用 do.callMap

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)