当我将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
有谁能告诉我为什么会这样?我尝试手动执行此操作,选择xx
和yy
的每四个值并使用lm
,然后R成功运行。
答案 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