【问题标题】:Evaluating a function pointed to by a string in R评估 R 中字符串指向的函数
【发布时间】:2021-05-21 21:37:14
【问题描述】:

假设我有以下:

   x <- 1:10  
   squared <- function(x) {x^2}  
   y <- "squared"

我希望能够使用 y 定义的字符串来评估函数。类似 eval(y) 的东西,我知道这是错误的,但会返回

[1] 1 4 9 16 25 36 49 64 81 100

感谢任何帮助。

【问题讨论】:

  • 另一个选项是:do.call(y, list(x)).
  • this question 的答案讨论了为什么您可能希望避免使用 eval(parse 以支持更易于理解和调试的其他替代方案。

标签: r string function evaluate


【解决方案1】:

要告诉R,给定字符串是命令而不是简单字符串,请使用eval(parse(text=...))

因此,你可以这样做

eval(parse(text=y))(x)

其中eval(parse(text=y)) 返回在y 的字符串中编码的函数,x 是函数参数。

此外,您可以简单地使用match.fun,它会查看环境中是否存在具有特定名称的函数并获取该函数。然后将其应用到参数x like

match.fun(y)(x)

【讨论】:

  • 那行得通。我没有意识到您可以将 (x) 添加到 eval-parse 函数的末尾。谢谢。
【解决方案2】:

要么使用match.fun

match.fun(y)(x)
#[1]   1   4   9  16  25  36  49  64  81 100

get

get(y)(x)
#[1]   1   4   9  16  25  36  49  64  81 100

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 2018-10-03
    • 2020-11-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多