是否有另一种方法可以将字符串转换为以下函数以外的函数?
示例:x+2
f <- function(x) {
eval( parse(text=("x+2")) )
}
print( f(2) )
4
我没有找到另一种方式。
谢谢你
答案 0 :(得分:4)
如何通过将字符串作为正文粘贴来创建函数,然后评估整个函数?
str <- "x+2"
f <- eval(parse(text=paste("function(x) {",str,"}")))
f(2)
## 4
?这样,评估成本只需预先支付一次,而不是每次调用函数时都支付......
另一种可能性是创建一个带有空体的x函数,然后将解析后的表达式作为正文填充......
f <- function(x) {}
body(f) <- parse(text="x+2")
f(2)
顺便说一下,我是hope you're being careful about what strings you evaluate,例如如果str
类似于"system('rm -rf /')"
...?
答案 1 :(得分:1)
我可能完全错过了你的观点,但这就是我为你所做的:
f1 <- function(x="x") {
a <- as.expression(paste0(x,"+2"))
print(class(a))
return( eval(parse(text=a)) )
}
f1(2)
4