使用向量列表作为参数进行向量化

时间:2019-06-03 21:30:07

标签: r vectorization apply mapply

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

1 个答案:

答案 0 :(得分:1)

我们可以将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)