【问题标题】:data.table 1.8.x mean() function auto removing NA?data.table 1.8.x mean() 函数自动删除 NA?
【发布时间】:2013-09-05 11:27:35
【问题描述】:

今天我在我的程序中发现了一个错误,原因是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

这是预期的行为吗?

【问题讨论】:

    标签: r data.table mean na na.rm


    【解决方案1】:

    这不是故意的。看起来像是优化的问题......

    > 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 point 3,不再需要知道。通过设置选项关闭优化(datatable.optimize=0)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多