使用以字符串作为参数的替换在 R 中编辑函数
Edit function in R using substitute with string as argument
我正在尝试使用 R 中的 body
和 substitute
函数来编辑一个函数。我想从一个字符串中为该函数构造一个新行,然后替换它进入函数。
我想我需要将字符串转换为某个 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
我正在尝试使用 R 中的 body
和 substitute
函数来编辑一个函数。我想从一个字符串中为该函数构造一个新行,然后替换它进入函数。
我想我需要将字符串转换为某个 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