我正在尝试在嵌套的函数系列中传递表达式。以下是我想要做的工作的简化示例:
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(......
序列的问题,但我想知道是否有任何干净的方法在嵌套函数之间传递表达式。
提前感谢您阅读本文。
答案 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
首先,您需要从两个级别获取未评估的表达式,然后在当前参数值上下文中对其进行评估。