lm.fit中的错误(x,y,偏移=偏移,singular.ok = singular.ok,...):0(非NA)情况

时间:2013-04-26 09:08:21

标签: r for-loop lm

当我将lm与循环一起使用时遇到问题。我希望使用xxyy的每四个值来拟合回归线。

这是我的代码,

>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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

原因是由于操作员优先(在-:之间),它没有达到预期的效果:

对于第一次迭代,你得到:

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