【问题标题】:Passing a function argument to other arguments which are functions themselves将函数参数传递给本身就是函数的其他参数
【发布时间】:2013-10-05 04:49:56
【问题描述】:

假设我有一个外部函数,它有一个数字参数和一个参数,它本身就是一个函数(内部函数)。如何将外部函数的数字参数的值作为参数传递给内部函数?考虑这个玩具示例:

innerfun <- function(M){
 1:M
}

outerfun <- function(x, fun){
 x * fun
}

outerfun(x = 3, fun = innerfun(M = 3)) ## works
outerfun(x = 3, fun = innerfun(M = x)) ## error because innerfun can't find 'x'
outerfun(x = 3, fun = innerfun(M = get("x"))) ## doesn't work either...

所以我想做的是在评估outerfun的参数时调用innerfun,在调用innerfun时使用这些outerfun-arguments。有什么想法或建议吗?

【问题讨论】:

    标签: r function arguments


    【解决方案1】:

    我会做这样的事情:

    outerfun <- function(x, fun,...){
      x * fun(x,...)
    }
    innerfun <- function(M){
      seq_len(M) ## safer than 1:M
    }
    outerfun(x=3, innerfun)
    [1] 3 6 9
    

    请注意,如果内部函数有多个参数,它仍然有效:

    innerfun2 <- function(M,Z){
      seq(M+Z)
    }
    outerfun(x=3, innerfun2,Z=3)
    [1]  3  6  9 12 15 18
    

    【讨论】:

    • 谢谢,这可能是最简单的解决方案。我只是没有想到通过将 innerfun 作为不带参数的函数调用来利用 R 的惰性求值。一旦在outerfun 的主体内部评估了innerfun(而不是在outerfun 的初始化期间),传递参数就更容易了。
    • @WolfgangPößnecker 这里与惰性评估无关
    【解决方案2】:

    添加一个“全局”变量:

    param = 3;
    outerfun(x = param, fun = innerfun(M = param))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2011-11-01
      • 2020-03-04
      相关资源
      最近更新 更多