在公式中使用R中的lm()的快捷方式

Pas*_*ten 6 r matrix formula lm

可以使用公式的快捷方式 lm()

m <- matrix(rnorm(100), ncol=5)
lm(m[,1] ~ m[,2:5]
Run Code Online (Sandbox Code Playgroud)

在这里它将是相同的

lm(m[,1] ~ m[,2] + m[,3] + m[,4] + m[,5]
Run Code Online (Sandbox Code Playgroud)

但是在变量不是同一级别的情况下(至少这是我现在的假设)这不起作用,我得到错误:

Error in model.frame.default(formula = hm[, 1] ~ hm[, 2:4], drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'hm[, 2:4]'
Run Code Online (Sandbox Code Playgroud)

数据(hm):

     N cor.distance switches  time
1   50   0.04707842        2 0.003
2  100  -0.10769441        2 0.004
3  200  -0.01278359        2 0.004
4  300   0.04229509        5 0.008
5  500  -0.04490092        6 0.010
6 1000   0.01939561        4 0.007
Run Code Online (Sandbox Code Playgroud)

是否还有一些捷径可以避免编写长公式?

Hug*_*ugh 9

试试lm(y ~ ., data)这里.的意思是"每隔一列datay.

m <- matrix(rnorm(100), ncol =5)
m <- as.data.frame(m)
names(m) <- paste("m", 1:5, sep="")
lm(m1 ~., data=m)
Run Code Online (Sandbox Code Playgroud)

您可以重新分配m以仅包含作为预测变量的列

m <- m[ ,2:4]
lm(m1 ~ ., data=m)
Run Code Online (Sandbox Code Playgroud)


Jul*_*ora 6

当因变量位于第一列时,还有另一种快捷方式:

data <- data.frame(y = rnorm(10), x1 = rnorm(10), x2 = rnorm(10))
lm(data)
Run Code Online (Sandbox Code Playgroud)