应用于函数向量

时间:2014-05-06 13:56:47

标签: r

给出一个函数的向量(实际上是一个列表):

 fs = c(sin, cos, tan)

和值向量:

 xs = c(.1, .3, .5)

是否有更好/更整洁/更快/更强的方法为每个向量元素计算fs[[i]](xs[i])

 vapply(1:3, FUN.VALUE = 1 ,function(i){fs[[i]](xs[i])})
  [1] 0.09983342 0.95533649 0.54630249

或者我在某个地方错过了fapply功能?函数将始终是单个标量值的函数并返回单个标量值。

2 个答案:

答案 0 :(得分:8)

这是一个替代方案,它的主要优势在于它不需要定义匿名函数。

mapply(do.call, fs, lapply(xs, list))
# [1] 0.09983342 0.95533649 0.54630249

答案 1 :(得分:8)

简单明了:

mapply(function(fun, x) fun(x), fs, xs)

但我同意@flodel。我也在寻找function(fun, ...) fun(...)的基本功能,并且惊讶于似乎没有。{另一方面,到目前为止,我从未需要它。