Функция data.table 1.8.x mean() автоматически удаляет NA?

Сегодня обнаружил ошибку в своей программе из-за data.table автоудаления NA для 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

Это предполагаемое поведение?


person colinfang    schedule 02.09.2013    source источник


Ответы (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. Из НОВОСТИ:

mean() в j был оптимизирован, начиная с версии 1.8.2, но не учитывал na.rm=TRUE (по умолчанию). Большое спасибо Колину Фангу за репортаж. Добавлен тест.

Новая функция в версии 1.8.2:

mean() теперь автоматически оптимизируется, #1231. Это может ускорить группировку в 20 раз при большом количестве групп. См. пункт 3 вики, который больше не нужен для знать. Отключите оптимизацию, установив параметры (datatable.optimize=0).

person Matt Dowle    schedule 02.09.2013