2015-10-01 2 views
9

Я хочу подмножить некоторые строки таблицы данных. Как это:Таблица данных подмножества без использования <-

# 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,] 

Однако, я работаю с огромным набором данных, и я хотел, чтобы избежать использования <-, который не является памятью эффективной, поскольку он делает копию данных.

Это правильно? Возможно ли обновить отфильтрованные данные без <-?

+0

как вы можете обновлять данные, не присваивая их переменной? в конце после всей вашей обработки изменения должны быть назначены переменной. –

+0

Почему вы хотите подмножить данные, если вы не хотите их хранить? Вам это нужно только временно? Или вам нужно только подмножество и хотите отказаться от оригинала, и вы ищете эффективный способ сделать это? – RHA

+0

Я думаю, вы просите невозможного. Это может быть интересным FR на GH. Но я считаю, что для реализации такой вещи потребуется * много * развития. –

ответ

7

Что вы спрашиваете, будет удалять строки по ссылке.

Это еще не возможно, но есть FR для этого #635.

До этого вы должны скопировать (в памяти) ваше data.table подмножество, копия делается <- (или =) при сочетании с подмножеством (i арг), так что пока вы не можете избежать этого.

Если это поможет каким-то образом вы можете работать на объектах языка предопределить операции и задержать его оценки, а также повторно использовать предопределенные объекты несколько раз:

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. при подмножестве data.table вам не нужно использовать среднюю запятую, например dt[x==1,], вы можете использовать dt[x==1].