首页 > 解决方案 > 在另一个函数中使用一个函数作为输入

问题描述

我正在尝试修复下面的代码。下面的代码是我真实代码的简化版本

fa=function(x){
  x+y
}
fb=function(x,func){
  y=rnorm(1)
  func(x)
}
fb(3,fa)

运行代码返回错误:

“func(x) 中的错误:找不到对象‘y’”。

我可以通过移动y=rnorm(1)到全局环境来修复它,但我需要y发挥作用,因为在我的真实代码中,每次迭代都有一个 for 循环和 y 变化。

非常感谢解决此问题的任何帮助

标签: r

解决方案


您可以使用match.fun将函数作为参数传递。不过,我不确定解决这个特定问题的最佳方法是什么。

fa = function(x, y){
    x + y
}

set.seed(42)
fb = function(x, func){
    y = rnorm(1)
    match.fun(func)(x, y)
}
fb(3, fa)
#[1] 4.370958

推荐阅读