给出一个函数的向量(实际上是一个列表):
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
功能?函数将始终是单个标量值的函数并返回单个标量值。
答案 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(...)
的基本功能,并且惊讶于似乎没有。{另一方面,到目前为止,我从未需要它。