添加括号时子集 `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
上运行,一次完成。
我最近在一些旧代码中注意到,在对 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
上运行,一次完成。