更改不带引号的函数体
Change the body of a function without quote marks
我需要根据用户给出的输入更改函数的主体。
modelstring <- function() {
for (h in (l1i1[j]):(l1i2[j])) {
w[h] <- 1/l1n[h]
}
}
userinput <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])"
body(modelstring)[[2]][[4]][[2]][[3]] <- userinput
问题是更改后的函数包含 引号。我该如何摆脱它们?
modelstring
function ()
{
for (h in (l1i1[j]):(l1i2[j])) {
w[h] <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])"
}
}
将用户输入计算为公式时,替换有效且不插入引号
userinput <- as.formula(w ~ b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2]))
但是,我需要使用 <- 或 右侧 。在这些情况下,计算公式会产生错误。
我也试过 noquote 仍然给出引号:
userinput <- noquote("b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])")
最后,我尝试了 expr(!!userinput)、subs() 和 的不同组合替换.
假设所需的输入是
modelstring
函数和
- 替换为字符串的文本,
userinput
使用 parse
将字符串转换为表达式,然后在末尾添加 [[1]] 将其从表达式转换为调用对象:
userinput <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])" # as in question
body(modelstring)[[2]][[4]][[2]][[3]] <- parse(text = userinput)[[1]]
modelstring
## function ()
## {
## for (h in (l1i1[j]):(l1i2[j])) {
## w[h] <- b.w[1] * X.w[i, 1]^exp(b.w[2] * X.w[i, 2])
## }
## }
这里有一个更简单的示例,可能对您有所帮助:
# inputs
f <- function() { 37 }
s <- "pi * pi"
body(f)[[2]] <- parse(text = s)[[1]]
f()
## [1] 9.869604
我需要根据用户给出的输入更改函数的主体。
modelstring <- function() {
for (h in (l1i1[j]):(l1i2[j])) {
w[h] <- 1/l1n[h]
}
}
userinput <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])"
body(modelstring)[[2]][[4]][[2]][[3]] <- userinput
问题是更改后的函数包含 引号。我该如何摆脱它们?
modelstring
function ()
{
for (h in (l1i1[j]):(l1i2[j])) {
w[h] <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])"
}
}
将用户输入计算为公式时,替换有效且不插入引号
userinput <- as.formula(w ~ b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2]))
但是,我需要使用 <- 或 右侧 。在这些情况下,计算公式会产生错误。
我也试过 noquote 仍然给出引号:
userinput <- noquote("b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])")
最后,我尝试了 expr(!!userinput)、subs() 和 的不同组合替换.
假设所需的输入是
modelstring
函数和- 替换为字符串的文本,
userinput
使用 parse
将字符串转换为表达式,然后在末尾添加 [[1]] 将其从表达式转换为调用对象:
userinput <- "b.w[1]*X.w[i,1]^exp(b.w[2]*X.w[i,2])" # as in question
body(modelstring)[[2]][[4]][[2]][[3]] <- parse(text = userinput)[[1]]
modelstring
## function ()
## {
## for (h in (l1i1[j]):(l1i2[j])) {
## w[h] <- b.w[1] * X.w[i, 1]^exp(b.w[2] * X.w[i, 2])
## }
## }
这里有一个更简单的示例,可能对您有所帮助:
# inputs
f <- function() { 37 }
s <- "pi * pi"
body(f)[[2]] <- parse(text = s)[[1]]
f()
## [1] 9.869604