在R-统计中,假设我有
a <- 5
b <- 3
现在我想用表达式函数编写一个数学方程式,如下所示
exp <- expression(a * e ^ (b * x))
但是我想要方程中的a和b的值而不是字母,
即。我希望它显示 5 e ^ 3x。
我该怎么做?
原因是我不会提前知道值a和b,这些来自拟合指数曲线,所以我不能使用expression(5 * e ^ (3 * x)).
答案 0 :(得分:4)
试试这个:
subst <- function(e, ...) do.call(substitute, list(e[[1]], list(...)))
exp <- expression(a * e^(b * x))
subst(exp, a = 1, b = 5)
## 1 * e^(5 * x)
请注意,虽然看起来可能更简单
substitute(expression(a * e^(b * x)), list(a = 1, b = 5))
有效,您不能简单地用变量替换expression(a * e^(b * x))
,因此只有当您的应用程序允许您对表达式进行硬编码时它才有效。
答案 1 :(得分:3)
您可以使用substitute
命令
a <- 5
b <- 3
substitute(expression(a * e^(b * x)), list(a=a, b=b))
# expression(5 * e^(3 * x))
或只是
substitute(a * e^(b * x), list(a=a, b=b))
# 5 * e^(3 * x)
答案 2 :(得分:2)
bquote
可能对您有用。这是一个例子,
> a <- 5; b <- 3
> bquote(.(a) * e^(.(b) * x))
# 5 * e^(3 * x)
> a <- 10; b <- 6
> bquote(.(a) * e^(.(b) * x))
# 10 * e^(6 * x)
.()
中包含的术语在指定环境中进行评估。结果是一个未评估的表达式,.()
包装的变量被替换为其赋值。