不使用 <- 的子集数据 table

Subset data table without using <-

我想对数据 table 的某些行进行子集化。像这样:

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

但是,我正在处理一个庞大的数据集,我想避免使用 <-,因为它会复制数据,所以内存效率不高。

这是正确的吗? 是否可以在没有 <- 的情况下更新过滤后的数据?

您要问的是通过引用删除行

目前还不可能,但是有 FR #635

在那之前你需要复制(在内存中)你的 data.table 子集,当与子集 (i arg) 所以现在你无法避免。

如果它以某种方式有所帮助,您可以对语言对象进行操作以预定义操作并延迟其评估,也可以多次重复使用预定义对象:

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

顺便说一句。子集 data.table 时,您不需要像 dt[x==1,] 那样使用中间逗号,您可以使用 dt[x==1].