将一串字符转换为一个函数

时间:2018-06-15 02:07:27

标签: r string function character

是否有另一种方法可以将字符串转换为以下函数以外的函数?

示例:x+2

f <- function(x) {
     eval( parse(text=("x+2")) )
}

print( f(2) )
  

4

我没有找到另一种方式。

谢谢你

2 个答案:

答案 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