修改lm()函数并防止其失败

时间:2019-05-08 00:21:03

标签: r data.table lm

我想修改基数R的lm()函数。具体地说,如果所有数据都是NA,我不希望它失败。现在,它失败并显示错误:0 (non-NA) cases.

我必须在data.table中调用lm()。涉及更多的链接和分组过程。

我为lm()写了一个包装器,但是我不知道如何访问data参数。我可以访问formula参数。

LM = function(...) {

  for(i in list(...)) {
    print(i);
  }

  lm(...);
}


> mydata[Date > "May 1951", lm(dep_var ~ ind_var)$coef[2], by = Date]
         Date          V1
  1: Jun 1951  0.56078961
  2: Jul 1951  0.03058471
  3: Aug 1951  0.67276820
  4: Sep 1951 -0.36109541
  5: Oct 1951  0.23469848


> mydata[Date > "May 1951", LM(dep_var ~ ind_var)$coef[2], by = Date]
dep_var ~ ind_var
<environment: 0x3662f3d0>

<<< repeat 4 times >>>

         Date          V1
  1: Jun 1951  0.56078961
  2: Jul 1951  0.03058471
  3: Aug 1951  0.67276820
  4: Sep 1951 -0.36109541
  5: Oct 1951  0.23469848

以下是失败案例:

> mydata[Date == "Jan 1926", LM(dep_var ~ ind_var)$coef[2], by = Date]
dep_var ~ ind_var
<environment: 0x99f14860>
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
  0 (non-NA) cases
>
> mydata[Date == "Jan 1926", lm(dep_var ~ ind_var)$coef[2], by = Date]
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
  0 (non-NA) cases
>

"Jan 1926"的数据全部为NA,因此lm()失败。在这种情况下,我希望包装函数LM()返回NA并继续工作。我玩过na.action属性,但没有解决方法。

0 个答案:

没有答案