2012-12-04 16 views

Odpowiedz

8

Wydajność i szybkość ustawienia klucza będą zależeć od typu zmiennej kluczowej. Kolumny będą wolniejsze niż integer. character kolumny (gdy krótkie ciągi) wydają się być szybkie.

np

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) 

Niektóre czasy

# 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 

co do których droga będzie lepiej. Prawdopodobnie będzie to zależeć od tego, z czym najczęściej masz do czynienia samodzielnie.

Na przykład, może być konieczne, aby wszystkie dane za rok 1.

Jeśli ustawiono klucz jako year, id następnie można użyć

D[J(1)] 

ale jeśli klawisz został ustawiony jako id, year wtedy musiałby

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

który jest bardziej typowania i potrwa dłużej, ponieważ musi obliczyć unique(id).

Występuje żądanie dotyczące funkcji FR#1007, które wygląda na zezwolenie na klucz dodatkowy, ale nie zostało to jeszcze zaimplementowane. Obecnie istnieje jeden klucz, który może zajmować więcej niż jedną kolumnę.

+0

Wielkie dzięki, mnel. – AdamNYC

Powiązane problemy