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

Edit function in R using substitute with string as argument

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

我想我需要将字符串转换为某个 class,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)
}

我们可以解析表达式

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

只需使用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