首页 > 解决方案 > 将函数强制转换为表达式?

问题描述

是否有任何函数或方法将函数对象强制转换为 R 中的表达式?

假设我有u = function (x, y) 2 * x^0.8 * y^0.2. 我想要实现的是转换u成一个callexpression对象。示例,2 * x^0.8 * y^0.2带有mode(.) == 'call'expression(2 * x^0.8 * y^0.2)

我知道您可以执行以下操作:


str2lang(deparse(u)[[2]])
2 * x^0.8 * y^0.2

deparse仍然可以在函数有几行的情况下工作。

ff = function(x, y) {
        x = x + 1
        y = y + 1
        return(x+y) 
        }

str2lang(paste(deparse(ff)[-1], collapse='\n'))

{
    x = x + 1
    y = y + 1
    return(x + y)
}

是否已经在 R 中实现了更好的方法?

标签: r

解决方案


使用body. 不使用任何包。

b <- body(ff)

# test
eval(b, list(x = 3, y = 10))
## [1] 15

# compare to ff
ff(x = 3, y = 10)
## [1] 15

推荐阅读