如何解决使用 R,如何将字符串转换为函数例如,使用 `as.function`?
我有一个字符串:
FUN.n = "exp( 3 * x^2 + 2 * x + 1)";
我想将其转换为函数:
myFunction = castAsFunction ( FUN.n );
这样我就可以像这样访问它:
myFunction(x)
它会适当地评估。
FUN.n = "exp( 3 * x^2 + 2 * x + 1)";
myFunction = castAsFunction ( FUN.n );
# [...]
myFunction = function(x)
{
exp( 3 * x^2 + 2 * x + 1);
}
x = -3:3;
myFunction(x);
# [1] 3.6e+09 8.1e+03 7.4e+00 2.7e+00 4.0e+02 2.4e+07 5.8e+14
我已经尝试过 as.function
和 eval(parse(text
,但它们的行为都没有我预期的那样。
我正在寻找可变参数解决方案。
解决方法
我们实际上可以创建一个名为 castAsFunction
的函数。我们不仅需要给它一个字符串作为函数体,还需要给它形式参数。感觉这个函数可以简化,但它适用于上面的例子。
FUN.n = "exp( 3 * x^2 + 2 * x + 1)"
x = -3:3
castAsFunction <- function(body,...) {
dots <- match.call(expand.dots = FALSE)$...
form_ls <- rep(list(bquote()),length(dots))
names(form_ls) <- as.character(dots)
f <- function(){}
formals(f) <- form_ls
body(f) <- str2lang(body)
environment(f) <- parent.frame()
f
}
myfun <- castAsFunction(FUN.n,x)
myfun
#> function (x)
#> exp(3 * x^2 + 2 * x + 1)
myfun(x)
#> [1] 3.584913e+09 8.103084e+03 7.389056e+00 2.718282e+00 4.034288e+02
#> [6] 2.415495e+07 5.834617e+14
由 reprex package (v0.3.0) 于 2021 年 2 月 18 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。