当我将lm和loop一起使用时,我遇到了一个问题。我想用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成功运行。
发布于 2013-04-26 17:22:59
将[i-3:i]更改为[(i-3):i]可消除错误消息。
发布于 2013-04-26 17:43:18
原因是由于操作符优先级(在-和:之间),它没有执行您期望的操作:
对于您得到的第一次迭代:
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.037666732https://stackoverflow.com/questions/16232650
复制相似问题