我想在 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
参数中