给定一个函数的向量(实际上是一个列表):
fs = c(sin, cos, tan)
Run Code Online (Sandbox Code Playgroud)
和一个值向量:
xs = c(.1, .3, .5)
Run Code Online (Sandbox Code Playgroud)
是否有更好/更整洁/更快/更强的计算方法fs[[i]](xs[i])为每个向量元素:
vapply(1:3, FUN.VALUE = 1 ,function(i){fs[[i]](xs[i])})
[1] 0.09983342 0.95533649 0.54630249
Run Code Online (Sandbox Code Playgroud)
或者我在fapply某个地方错过了一个功能?函数将始终是单个标量值的函数并返回单个标量值.
这是另一种替代方案,它相对于目前建议的主要优点是它不需要定义匿名函数.
mapply(do.call, fs, lapply(xs, list))
# [1] 0.09983342 0.95533649 0.54630249
Run Code Online (Sandbox Code Playgroud)
好又简单:
mapply(function(fun, x) fun(x), fs, xs)
Run Code Online (Sandbox Code Playgroud)
但我同意@flodel.我也在寻找一个基本功能,function(fun, ...) fun(...)并且惊讶于似乎没有.另一方面,到目前为止,我从未需要它.