0

当我将 lm 与循环一起使用时遇到问题。xx我想用和的每四个值拟合回归线yy

这是我的代码,

>xx<-c(0 , 55, 146, 457, 643, 825,1008)
>yy<-c(NA, 110, 132, 108, 124, 115, 134)
>n<-length(xx)
>slop<-rep(NA,n)
>for (i in 4:n){
   x<-xx[i-3:i]
   y<-yy[i-3:i]
   slop[i]<-lm(y~x)$coefficients[2]
   }
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

谁能告诉我为什么会这样?我尝试手动执行,每四个值选择xxandyy并使用lm,然后 R 成功运行。

4

2 回答 2

1

原因是由于运算符优先级(在-and之间:),它没有按照您的预期进行:

对于第一次迭代,您将获得:

4-3:4
[1] 1 0
xx[4-3:4]
[1] 0
yy[4-3:4]
[1] NA

因此:

lm(yy[1]~xx[1])
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

为了确保你得到你想要的,你需要添加括号来明确说明所需的运算符的顺序:

(4-3):4
[1] 1 2 3 4

for (i in 4:n){
x<-xx[(i-3):i]
y<-yy[(i-3):i]
slop[i]<-lm(y~x)$coefficients[2]
     }

slop
[1]           NA           NA           NA -0.023502847  0.001080591
[6] -0.018919254  0.037666732
于 2013-04-26T09:43:18.277 回答
1

更改[i-3:i][(i-3):i]消除错误消息。

于 2013-04-26T09:22:59.027 回答