【问题标题】:Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases [closed]lm.fit(x,y,offset = offset,singular.ok =singular.ok,...)中的错误:0(非 NA)案例 [关闭]
【发布时间】:2013-04-20 09:42:03
【问题描述】:

当我将 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 运行成功。

【问题讨论】:

  • 我终于找到了错误,也许它对有同样困惑的人有帮助。循环中需要 t

标签: r for-loop lm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    原因是操作员优先(在-: 之间)它没有按照您的预期进行:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2014-12-12
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2018-09-26
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      相关资源
      最近更新 更多