我最近注意到,在一些旧的代码中,当我在子集一个 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'])
第二组方括号是对data.table的第二次操作 DT
意思是 DT[subgroup]
创建一个新的数据表,从 DT
,然后 [, !'Group']
对该数据表进行操作,创建另一个新的数据表。因此速度下降。
# Faster way
rcorr(DT[subgroup, !'Group'])
这种方式只对 DT
,一气呵成。