2016-07-01 22 views
4

Ich denke, es ist ein Fehler in der einzigartigen-Funktion des data.table (1.9.6) Paket:unerwartetes Verhalten mit beiden: einzigartig und == Funktion

Kleines Beispiel:

test <- data.table(a = c("1", "1", "2", "2", "3", "4", "4", "4"), 
        b = letters[1:8], 
        d = c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE)) 

    a b  d 
1: 1 a TRUE 
2: 1 b TRUE 
3: 2 c FALSE 
4: 2 d FALSE 
5: 3 e TRUE 
6: 4 f FALSE 
7: 4 g FALSE 
8: 4 h FALSE 

test[d == TRUE, `:=` (b = "M")] 
test <- unique(test, by = c("a", "b")) 

    a b  d 
1: 1 M TRUE 
2: 2 c FALSE 
3: 2 d FALSE 
4: 3 M TRUE 
5: 4 f FALSE 
6: 4 g FALSE 
7: 4 h FALSE 

an diesem Punkt ist alles perfekt, aber jetzt will ich nur die Zeilen auszuwählen, in Spalte d wahr ist:

test[d == TRUE] 
    a b d 
1: 1 M TRUE 

aber das Ergebnis ist falsch.

+3

FWIW, 'test [(d == TRUE)]', 'test [d == 1]' und 'test [(d)]' geben alle richtigen Ergebnisse. – nicola

+1

Seltsam ... das funktioniert stattdessen: 'test [test $ d == TRUE]' – digEmAll

+4

Das sieht tatsächlich wie ein Fehler aus, der wahrscheinlich durch den Sekundärindex verursacht wurde. Vielleicht in Verbindung mit [diesem] (https://github.com/Rdatatable/data.table/issues/1704). Egal, SO ist nicht für Fehlerberichte gedacht. Bugs sollten über GH berichtet werden. Auch die Verwendung von '==' auf einem logischen Vektor macht keinen Sinn für mich. Warum nicht einfach "([d)]" testen? –

Antwort

5

Das Bug wurde in Entwicklungs-Repository nur fixiert.

library(data.table) 
test <- data.table(a = c("1", "1", "2", "2", "3", "4", "4", "4"), 
        b = letters[1:8], 
        d = c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE)) 
test[d == TRUE, `:=` (b = "M")] 
test <- unique(test, by = c("a", "b")) 
test[d == TRUE] 
# a b d 
#1: 1 M TRUE 
#2: 3 M TRUE 

Entwicklerversion data.table wurde bereits in drat Repo veröffentlicht und easily installed durch sein kann:

install.packages("data.table", repos="https://Rdatatable.github.io/data.table", type="source") 

Dank für die Berichterstattung!

0

Ohne die Fehler zu lösen, ist es mit normaler data.frame Syntax funktioniert:

test[test$d, ] 

oder

test[test$d == TRUE, ] 
Verwandte Themen