2013-04-26 334 views
1

當我將lm與循環一起使用時遇到問題。我想用xxyy的每四個值來擬合迴歸線。lm.fit(x,y,offset = offset,singular.ok = singular.ok,...):0(non-NA)的情況下的錯誤

這裏是我的代碼,

>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成功運行。

+0

我終於找到了錯誤,也許這對有同樣困惑的人有幫助。在循環中需要t <-i-3,否則當我取大於6的值時,R變得混亂並停止計算。 – fiona 2013-04-26 09:41:47

回答

1

[i-3:i]更改爲[(i-3):i]消除了該錯誤消息。

1

的原因是因爲運營商prioriy它不是做(間-:)你所期望的:

對於你的第一次迭代:

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