【问题标题】:Transform a string of characters into a function将字符串转换为函数
【发布时间】:2018-11-24 20:48:23
【问题描述】:

除了以下之外,还有其他方法可以将字符串转换为函数吗?

示例:x+2

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

print( f(2) )

4

我没有找到替代方法。

谢谢你

【问题讨论】:

  • 如果您提供更多上下文,人们可能会想出一些适合的解决方案。例如,为什么这不适合您的需求?
  • 我在闪亮时遇到问题。我正在将文本转换为函数:f

标签: r string function character


【解决方案1】:

如何通过将字符串粘贴为主体来创建函数,然后评估整个内容?

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 /')" ... 会发生什么?

【讨论】:

    【解决方案2】:

    我可能完全错过了你的意思,但这是我为你准备的:

    f1 <- function(x="x") {
      a <- as.expression(paste0(x,"+2"))
      print(class(a))
      return( eval(parse(text=a)) )
    }
    f1(2)
    

    4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多