添加括号时子集 `data.table` 的速度降低

Speed decrease in subsetting `data.table` when adding a bracket

我最近在一些旧代码中注意到,在对 data.table 进行子集化和重复执行函数(在我的例子中,计算相关矩阵)时,我一直在包含额外的方括号。所以,

# Slow way
rcorr(DT[subgroup][, !'Group', with=F])

# Faster way
rcorr(DT[subgroup, !'Group', with=F])

(区别在subgroup之后)。只是出于好奇,为什么会发生这种情况?有了额外的括号,data.table 是否需要执行一些额外的计算?

简单解读一下:

# Slow way
rcorr(DT[subgroup][, !'Group'])

第二组括号是对DT的第二次操作,意思是DT[subgroup]DT创建一个新数据table,然后[, !'Group'] 对该数据进行操作 table,创建另一个新数据 table。因此速度下降。

# Faster way
rcorr(DT[subgroup, !'Group'])

此方法仅在 DT 上运行,一次完成。