问题描述
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)