data.table не фильтруется правильно - PullRequest
0 голосов
/ 21 февраля 2019

При использовании data.table и фильтрации я получаю неправильные результаты.

Я привожу здесь воспроизводимый пример, чтобы увидеть проблему:

set.seed(123)
results <- data.table(id = 1:1000000, v1 = rnorm(1000000))
rs <- data.table(type = 1:1000000 %% 5, prob = rnorm(1000000))

results[, `:=`(cls = rs$type, cls.prob = rs$prob)]
results[cls != 0 & abs(v1 - cls.prob) < 0.3, `:=`(cls = 3, cls.prob = 1)]
summary(results[cls == 4, cls])
   # Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   #    4       4       4       4       4       4 
results[cls != 0 & abs(v1 - cls.prob) < 0.2, `:=`(cls = 3, cls.prob = 1)]
summary(results[cls == 4, cls])
   # Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   #    4       4       4       4       4       4 
results[cls != 0 & abs(v1 - cls.prob) < 0.5, `:=`(cls = 3, cls.prob = 1)]
summary(results[cls == 4, cls])
   # Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   # 3.00    4.00    4.00    3.87    4.00    4.00 

Как вы можете видеть последнее резюмедолжен выдавать 4 в каждом слоте.

Кто-нибудь знает, что происходит?

Я работаю над этой версией R

>version
               _                           
platform       x86_64-suse-linux-gnu       
arch           x86_64                      
os             linux-gnu                   
system         x86_64, linux-gnu           
status                                     
major          3                           
minor          1.3                         
year           2015                        
month          03                          
day            09                          
svn rev        67962                       
language       R                           
version.string R version 3.1.3 (2015-03-09)
nickname       Smooth Sidewalk 

и этой версией данных.стол:

> packageVersion('data.table')
[1] ‘1.9.4’
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...