在嵌套函数中传递表达式

时间:2015-06-11 15:45:44

标签: r

我正在尝试在嵌套的函数系列中传递表达式。以下是我想要做的工作的简化示例:

require(shiny)
outterfunc <- function(a,b,expr){
  innerfunc <- function(a,b, expr){
    shiny::exprToFunction(expr,quoted = F)()
  }
  return(innerfunc(a = a+1,b= b+1, expr=expr))
}

我希望在运行以下命令时得到此结果:

outterfunc(2,5,{a*b})
# 18

给我一​​个像

这样的错误
# Error in exprToFunction(expr, quoted = F)() : object 'b' not found

我设法解决使用eval(parse(text=paste(......序列的问题,但我想知道是否有任何干净的方法在嵌套函数之间传递表达式。

提前感谢您阅读本文。

1 个答案:

答案 0 :(得分:2)

在这种特殊情况下,似乎这将起作用

outterfunc <- function(a,b,expr){
  innerfunc <- function(a,b, expr){
    ex <- eval(substitute(substitute(expr)),parent.frame())
    eval(ex, environment())
  }
  return(innerfunc(a = a+1,b= b+1, expr=expr))
}

outterfunc(2,5,{a*b})
# [1] 18

首先,您需要从两个级别获取未评估的表达式,然后在当前参数值上下文中对其进行评估。