结合R中的表达式

psy*_*iko 3 expression r

我试图将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.我在这做错了什么?

leb*_*nok 6

这是一个老问题,但令人惊讶的是,没有给出简单的答案。正如评论中所说,“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 向导定义的“口语”意义上的表达式)的最简单方法。


mne*_*nel 5

不要使用表达式,使用函数.该

根据我的解释,以下将做你想要的

# 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)