2016-07-01 22 views
4

我想有在data.table(1.9.6)封裝的獨特功能的一個錯誤:意外行爲二者:獨特和==功能

小例如:

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 

在這一點上一切都很完美,但現在我只想選擇列d爲真的行:

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

但結果是錯誤的。

+3

FWIW,'test [(d == TRUE)]','test [d == 1]'和'test [(d)]'給出了所有正確的結果。 – nicola

+1

奇怪的是......這個代之以工作:'test [test $ d == TRUE]' – digEmAll

+4

這確實看起來像是一個可能由二級索引引起的錯誤。也許某種程度上與[this]相關(https://github.com/Rdatatable/data.table/issues/1704)。無論如何,SO不適用於錯誤報告。應該在GH上報告錯誤。另外,在邏輯向量上使用'=='對我來說沒有意義。爲什麼不只是'測試[(d)]'? –

回答

5

該缺陷是隻固定在發展資源庫。

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 

開發版本data.table已經發表在DRAT回購,可以由easily installed

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

感謝您的報告!

0

沒有解決的bug,但它與正常data.frame語法工作:

test[test$d, ] 

test[test$d == TRUE, ]