2015-10-01 17 views
9

Voglio sottoporre a sottoinsieme alcune righe di una tabella di dati. Come questo:Tabella dei dati dei sottoinsiemi senza utilizzare <-

# load data 
    data("mtcars") 

# convert to data table 
    setDT(mtcars,keep.rownames = T) 

# Subset data 
    mtcars <- mtcars[like(rn,"Mer"),] ; or 
    mtcars <- mtcars[mpg > 20,] 

Tuttavia, sto lavorando con una serie di dati enorme e ho voluto evitare di utilizzare <-, che non è efficiente della memoria perché fa una copia dei dati.

È corretto? È possibile aggiornare i dati filtrati senza <-?

+0

come è possibile aggiornare i dati senza assegnarli a una variabile? alla fine, dopo l'elaborazione, le modifiche devono essere assegnate a una variabile. –

+0

Perché vuoi sottoporre a serie i dati, se non vuoi salvarli? Ne hai bisogno solo temporaneamente? O hai solo bisogno del sottoinsieme e vuoi lasciare l'originale, e stai cercando un modo efficace per farlo? – RHA

+0

Penso che tu stia chiedendo l'impossibile. Questo potrebbe essere un FR interessante su GH però. Ma io credo che per implementare una cosa del genere richiederà un * lotto * di sviluppo. –

risposta

7

Quello che stai chiedendo sarebbe eliminare le righe per riferimento.

Non è ancora possibile, ma c'è il FR per quello #635.

Fino ad allora è necessario copiare (in memoria) il vostro sottoinsieme data.table, la copia è fatto da <- (o =) quando si combina con sottoinsieme (i arg) quindi per ora non si può evitare questo.

Se vi aiuterà in qualche modo si può operare su oggetti linguaggio di predefinire le operazioni e ritardare è la valutazione, anche riutilizzare gli oggetti predefiniti più volte:

mtcars_sub <- quote(mtcars[like(rn,"Mer")]) 
mtcars_sub2 <- quote(eval(mtcars_sub)[mpg > 20]) 
eval(mtcars_sub2) 
#   rn mpg cyl disp hp drat wt qsec vs am gear carb 
# 1: Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2 
# 2: Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2 

BTW. quando si esegue il subsetting di data.table non è necessario utilizzare la virgola centrale come dt[x==1,], è possibile utilizzare dt[x==1].

Problemi correlati