R中的字符向量和线性回归问题

机器算法验证 r 回归 造型 软件
2022-03-25 14:53:36

快速提问。

我想执行如下所示的线性回归:

lm(y ~ x1 + x2 + x3 + x4 +x5, mydata)

如果我手动写出这段代码,这很好。

但是,我想使用的自变量存储为一个字符,如下所示:

> vars
[1] "x1 + x2 + x3 + x4 +x5"

我试着输入这个:

lm(y ~ vars, mydata)
Error in model.frame.default...

但它给出了一个错误!

所以我尝试了这个:

lm(y ~ noquote(vars), mydata)
Error in model.frame.default...

然后这个

lm(y ~ print(vars, quote = FALSE), mydata)
Error in model.frame.default...

任何人都知道我该如何解决这个问题?“vars”中的字符串是由上游程序提供给我的,所以我无法在那个级别解决它。

谢谢!

1个回答

您可以使用标准 R 函数和as.formula(). 诀窍是要注意,您需要有一个完整的公式(至少包含一个~),以便 R 为您创建一个公式对象。这是一个例子

## predictors
vars <- "x1 + x2 + x3 + x4 + x5"

## dummy data for example
dat <- data.frame(matrix(rnorm(120), ncol = 6))
names(dat) <- c("y", paste("x", 1:5, sep = ""))

## create a formula - here we need to paste on the response part
##  y ~
form <- as.formula(paste("y ~", vars))

## Fit the model using `form`
mod <- lm(form, data = dat)

如果您打印form,您会看到 R 创建了一个不再打印为字符串的特殊对象:

> form
y ~ x1 + x2 + x3 + x4 + x5