使用 R 中的 `quote()` 函数生成多变量表达式

问题描述 投票:0回答:1

我正在尝试在 R 中生成一个简单的多变量表达式,类似于以下内容:

coef1 * prev1 + coef2 * prev2 + coef3 * prev3

我可以轻松地做到这一点

quote()

quote(coef1 * prev1 + coef2 * prev2 + coef3 * prev3)

生成所需的

call
类。

当我有多个系数(即多个

coef
)需要估计时,就会出现问题。

我可以使用

paste0()

来做到这一点
myvec <- 1:3

paste0(paste0("coef",myvec,"*prev",myvec),collapse="+")
#> [1] "coef1*prev1+coef2*prev2+coef3*prev3"

但问题是上面的类是

character
。使用
quote()
,类是
call
,可以用来评估。

我也无法将上面的内容包装在

quote
中,因为
paste0
函数将包含在表达式中:

quote(paste0(paste0("coef",myvec,"*prev",myvec),collapse="+"))

将给予:

paste0(paste0("coef", myvec, "*prev", myvec), collapse = "+")

当我想要的只是:

coef1 * prev1 + coef2 * prev2 + coef3 * prev3

有没有可能的方法仍然生成一个具有多个变量的

call
类来进行估计,而不必在
quote
中显式地输入它们?

提前致谢!

r
1个回答
1
投票

使用

str2lang
代替
quote

myvec <- 1:3

mycall <- str2lang(paste0(paste0("coef", myvec, "*prev", myvec), collapse = "+"))

mycall
#> coef1 * prev1 + coef2 * prev2 + coef3 * prev3

class(mycall)
#> [1] "call"
© www.soinside.com 2019 - 2024. All rights reserved.