带引号变量的 Eval 表达式
Eval expression with a quoted variables
我有多个表达式(func1、func2..)要使用每个表达式的参数进行评估:
eval(parse(text=func1), list(param1=exp1, param2=exp2, t =trunc),enclos=.GlobalEnv)
与:
func1 = "rho+lambda"; param1 = "rho"; param2 = "lambda"; exp1 = 0.1; exp2= 0.2
确实可以,但是当调用包含这个eval的函数时,报错
未找到该变量 "lambda"。
当它是一个列表时,这是一个环境问题。我将 Enclos 形式 parent.frame() 更改为 .GlobalEnv。
还有其他解决方案吗?!
通常答案是"Don't use eval(parse())
"。几乎总是有更好的选择。
无论如何,你应该检查你传递给它的列表:
func1 = "rho+lambda"; param1 = "rho"; param2 = "lambda"; exp1 = 0.1; exp2= 0.2
eval(parse(text=func1), setNames(list(exp1, exp2), c(param1, param2)))
#[1] 0.3
我有多个表达式(func1、func2..)要使用每个表达式的参数进行评估:
eval(parse(text=func1), list(param1=exp1, param2=exp2, t =trunc),enclos=.GlobalEnv)
与:
func1 = "rho+lambda"; param1 = "rho"; param2 = "lambda"; exp1 = 0.1; exp2= 0.2
确实可以,但是当调用包含这个eval的函数时,报错 未找到该变量 "lambda"。 当它是一个列表时,这是一个环境问题。我将 Enclos 形式 parent.frame() 更改为 .GlobalEnv。
还有其他解决方案吗?!
通常答案是"Don't use eval(parse())
"。几乎总是有更好的选择。
无论如何,你应该检查你传递给它的列表:
func1 = "rho+lambda"; param1 = "rho"; param2 = "lambda"; exp1 = 0.1; exp2= 0.2
eval(parse(text=func1), setNames(list(exp1, exp2), c(param1, param2)))
#[1] 0.3