我想在 mapply 中传递一个函数名作为参数:

f2 <- function(a, b) a + b^2
f <- function(a, b, func) func(a, b)
f(1, 3, f2)  ## returns 10
mapply(f2,  1:2,  3)  ## returns [1] 10 11
mapply(function(a, b) f(a, b, f2), 1:2,  3) ## returns [1] 10 11
mapply(f,  1:2,  3,  f2)  ## fails

最后的 mapply 调用产生错误
Error in dots[[3L]][[1L]] : object of type 'closure' is not subsettable
有没有办法做到这一点?

最佳答案

mapply 假设您要遍历在第一个函数之后传递的所有向量。但是您希望每次迭代都使用相同的 f2 值。您可以使用 MoreArgs= 参数来做到这一点

mapply(f,  1:2,  3,  MoreArgs=list(func=f2))

您对 3 没有同样的问题,因为 R 将执行向量回收以将 3 扩展为 c(3,3) 以匹配与 c(1,2) 相同的长度。 R 中的函数没有相同的隐式回收行为。但是如果你想让值始终保持不变,最好把它放在 MoreArgs 参数中

10-08 07:59