计算 R 中字符串指向的函数

问题描述

假设我有以下内容

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

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

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

感谢任何帮助。

解决方法

要么使用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
,

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

因此,你可以这样做

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

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

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

match.fun(y)(x)