6

data.table今日、自動削除によるプログラムのバグを発見しましNAmean

例えば:

> a<-data.table(a=c(NA,NA,FALSE,FALSE), b=c(1,1,2,2))
> a

> a[,list(mean(a), sum(a)),by=b]
   b V1 V2
1: 1  0 NA // Why V1 = 0 here? I had expected NA
2: 2  0  0


> mean(c(NA,NA,FALSE,FALSE))
[1] NA
> mean(c(NA,NA))
[1] NA
> mean(c(FALSE,FALSE))
[1] 0

これは意図した動作ですか?

4

1 に答える 1

5

これは意図したものではありません。最適化に問題があるように見えます...

> a[,list(mean(a), sum(a)),by=b]
   b V1 V2
1: 1  0 NA
2: 2  0  0
> options(datatable.optimize=FALSE)
> a[,list(mean(a), sum(a)),by=b]
   b V1 V2
1: 1 NA NA
2: 2  0  0
> 

v1.8.9 で調査および修正され、まもなく CRAN に実装されます。NEWSより

j の mean() は v1.8.2 以降最適化されていますが、na.rm=TRUE (デフォルト) を考慮していませんでした。報告してくれた Colin Fang に感謝します。テストが追加されました。

v1.8.2 の新機能は次のとおりです。

mean() が自動的に最適化されるようになりました (#1231)。これにより、多数のグループがある場合、グループ化を 20 倍高速化できます。知る必要がなくなったwiki ポイント 3を参照してください。options(datatable.optimize=0) を設定して最適化をオフにします。

于 2013-09-02T12:31:33.003 に答える