2012-12-04 8 views

Antwort

8

Die Leistung und Geschwindigkeit der Tasteneinstellung hängt von den Schlüsselvariablentypen ab. numeric Spalten sind langsamer als integer. character Spalten (wenn kurze Zeichenfolgen) scheinen schnell zu sein.

zB

library(data.table) 

set.seed(1) 
DIC <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6)) 
DIC2 <- copy(DIC) 
DIF <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.factor(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6)) 
DIF2 <- copy(DIF) 
DNC <- data.table(year = sample(as.numeric(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6)) 
DNC2 <- copy(DNC) 
DCC <- data.table(year = sample(as.character(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6)) 
DCC2 <- copy(DCC) 
DII <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(seq_len(2e5), 5e6, TRUE), z = rnorm(5e6)) 
DII2 <- copy(DII) 

Einige Timings

# key of integer, character columns 
system.time(setkey(DIC, year ,id)) 
    user system elapsed 
    3.21 0.11 3.31 
system.time(setkey(DIC2, id, year)) 
    user system elapsed 
    3.43 0.03 3.45 
# key of integer factor columns 
system.time(setkey(DIF, year ,id)) 
    user system elapsed 
    6.31 0.05 6.37 
system.time(setkey(DIF2, id, year)) 
    user system elapsed 
    6.44 0.06 6.54 
# key of numeric, character columns 
system.time(setkey(DNC, year ,id)) 
    user system elapsed 
    9.91 0.07 10.29 
system.time(setkey(DNC2, id, year)) 
    user system elapsed 
    10.11 0.07 10.34 
# key of two character columns 
system.time(setkey(DCC, year ,id)) 
    user system elapsed 
    3.34 0.05 3.40 
system.time(setkey(DCC2, id, year)) 
    user system elapsed 
    3.40 0.02 3.42 
# key of two integer columns 
system.time(setkey(DII, year ,id)) 
    user system elapsed 
    6.25 0.02 6.53 
system.time(setkey(DII2, id,year)) 
    user system elapsed 
    6.44 0.05 6.64 

In Bezug auf welche Art und Weise besser sein wird. Dies hängt wahrscheinlich davon ab, was Sie am wahrscheinlichsten nur für sich alleine tun.

Zum Beispiel können Sie für alle Daten erhalten Jahr 1.

Wenn Sie den Schlüssel als year, id gesetzt haben, dann können Sie

D[J(1)] 

verwenden, aber wenn der Schlüssel wurde eingestellt als id, year dann würden Sie

D[J(unique(id),1), nomatch = 0] 

müssen, der mehr Typisierung und wird länger dauern, da es unique(id) zu berechnen hat.

Es gibt eine Feature-Anforderung FR#1007, die einen Sekundärschlüssel erlaubt, aber dies ist noch nicht implementiert. Derzeit gibt es einen einzelnen Schlüssel, der mehr als eine Spalte belegen kann.

+0

Vielen Dank, mnel. – AdamNYC

Verwandte Themen