data.table自动删除NA中的平均功能? [英] data.table auto remove NA in by for mean function?
问题描述
今天我在程序中发现了一个错误,因为 data.table
auto remove NA
for 表示
Today I found out a bug in my program due to data.table
auto remove NA
for mean
例如:
> 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
行为?
推荐答案
这不是为了。看起来像是优化问题...
This isn't intended. Looks like a problem with optimization ...
> 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。从新闻:
Investigated and fixed in v1.8.9, soon to be on CRAN. From NEWS :
在j中的mean()已经从v1.8.2开始优化,但是不尊重na.rm = TRUE(默认值)。非常感谢Colin Fang的报告。测试已添加。
mean() in j has been optimized since v1.8.2 but wasn't respecting na.rm=TRUE (the default). Many thanks to Colin Fang for reporting. Test added.
v1.8.2中的新功能为:
The new feature in v1.8.2 was :
mean()现在自动优化,#1231。当有大量的组时,这可以加快分组20次。请参阅 wiki点3 ,不再需要知道。通过设置选项(datatable.optimize = 0)关闭优化。
mean() is now automatically optimized, #1231. This can speed up grouping by 20 times when there are a large number of groups. See wiki point 3, which is no longer needed to know. Turn off optimization by setting options(datatable.optimize=0).
这篇关于data.table自动删除NA中的平均功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!