我试图将R中的多个表达式组合成一个表达式.理想情况下,我可以做这样的事情:
g <- expression(exp(a[1]*x)/(1 + exp(a[1]*x)))
h <- expression(exp(a[2]*x)/(1 + exp(a[2]*x)))
c <- expression(g * h)
Run Code Online (Sandbox Code Playgroud)
在哪里a是给定的数据向量,并且x是唯一未知的(并且在所有表达式中它是相同的未知).c会回来的
R> c
expression(exp(a[1]*x)/(1 + exp(a[1]*x)) * exp(a[2]*x)/(1 + exp(a[2]*x)))
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时,我得到了
R> c
expression(g * h)
Run Code Online (Sandbox Code Playgroud)
我想要一个等式
c http://lehrfeld.me/images/c.jpg
我可以插入一些矢量a来获得一个函数x.我在这做错了什么?
这是一个老问题,但令人惊讶的是,没有给出简单的答案。正如评论中所说,“R 不是符号代数程序”;然而,R 具有操作表达式的所有必要方法。我不知道如何做到这一点expressions(在技术意义上,请参阅?expression),但它非常简单calls:
g <- quote(exp(a[1]*x)/(1 + exp(a[1]*x)))
h <- quote(exp(a[2]*x)/(1 + exp(a[2]*x)))
substitute(g*h, list(g=g, h=h))
# exp(a[1] * x)/(1 + exp(a[1] * x)) * (exp(a[2] * x)/(1 + exp(a[2] * x)))
Run Code Online (Sandbox Code Playgroud)
可能有更简单的方法来实现您想要的(也许使用函数),但这是合并两个“调用”(即 R 向导定义的“口语”意义上的表达式)的最简单方法。
不要使用表达式,使用函数.该
根据我的解释,以下将做你想要的
# a function for a vector `x` and single value `a`
func <- function(x,a) { (exp(1)^(a*x)/(1 + exp(1)^(a*x))) }
# a function for a vector `x` and vector length 2 for `a`
foo <- function(x, a){func(x,a[1]) * func(x, a[2])}
# call the function to calculate what you want.
foo(x,a)
Run Code Online (Sandbox Code Playgroud)
如果你想要expression与之相关联,那么你可以绘制方程的文本,以下内容将起作用
expr <- expression(exp(1)^(a*x)/(1 + exp(1)^(a*x))
g <- do.call(substitute, list(as.list(expr)[[1]], env= list(a=3)))
h<- do.call(substitute, list(as.list(expr)[[1]], env= list(a=2)))
'%c%' <- function(a,b) bquote(.(a) %*% .(b))
fooExpr <- g %c% h
Run Code Online (Sandbox Code Playgroud)