在R中使用以字符串作为参数的替换来编辑函数

时间:2019-02-07 12:11:24

标签: r function edit substitution

我正在尝试使用R中的bodysubstitute函数来编辑一个函数。我想从一个字符串构造一个新行,然后将其替换为功能。

我想我需要将字符串转换为某个类,substitute可以对该类进行评估并将其提供给函数。但是,我该怎么办呢?

以下是我想要的示例:

myFun <- function(x) {
    A1 <- 1
    A2 <- 10
    A1 <- x^2 + A2  # Line to be changed
    return(A1 + A2)
}

n <- 2
m <- 1
express_string <- paste0("A", n, " <- x^2 + A", m)

body(myFun)[[4]] <- substitute( express_string )  # This is the tricky part.

这就是我希望函数最终显示的样子:

myFun <- function(x) {
    A1 <- 1
    A2 <- 10
    A2 <- x^2 + A1  # New line
    return(A1 + A2)
}

2 个答案:

答案 0 :(得分:2)

我们可以解析表达式

body(myFun)[[4]] <- rlang::parse_expr(express_string)    
myFun
#function (x) 
#{
#    A1 <- 1
#    A2 <- 10
#    A2 <- x^2 + A1
#    return(A1 + A2)
#}

答案 1 :(得分:2)

只需使用parse

body(myFun)[[4]] <- parse(text = express_string)[[1]]

当然,最好不要将R命令创建为字符串。 bquote可能会有所帮助:

LHS <- as.name(paste0("A", n))
RHS <- as.name(paste0("A", m))

express <- bquote(.(LHS) <- x^2 + .(RHS))

body(myFun)[[4]] <- express