0

lm を loop と一緒に使用すると問題が発生します。と の 4 つの値ごとに回帰直線を当てはめたいと思い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

なぜこれが起こるのか誰か教えてください。私はそれを手動でやろうとし、 と の 4 つの値ごとに選択してxxyy使用するlmと、R が正常に実行されます。

4

2 に答える 2

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
于 2013-04-26T09:43:18.277 に答える
1

に変更[i-3:i]すると[(i-3):i]、エラー メッセージが表示されなくなります。

于 2013-04-26T09:22:59.027 に答える