我正在尝试使用R中的body
和substitute
函数来编辑一个函数。我想从一个字符串构造一个新行,然后将其替换为功能。
我想我需要将字符串转换为某个类,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)
}
答案 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