data.table 1.8.x mean()函数自动删除NA?

col*_*ang 6 r mean na na.rm data.table

今天我发现我的程序中有一个错误,因为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
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

Mat*_*wle 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
> 
Run Code Online (Sandbox Code Playgroud)

在v1.8.9中进行了调查和修复,即将在CRAN上发布。来自新闻

自v1.8.2起,j中的mean()已进行了优化,但不考虑na.rm = TRUE(默认值)。非常感谢Colin Fang的报告。测试已添加。

v1.8.2中的新功能是:

现在会自动优化mean()#1231。当存在大量组时,这可以将分组速度提高20倍。请参阅Wiki要点3,不再需要知道。通过设置选项(datatable.optimize = 0)关闭优化。