我最近在一些旧代码中注意到,在对进行子集化并重复执行函数(在我的情况下,计算相关矩阵)时,我一直包括额外的方括号。所以,
data.table
(差异在# Slow way
rcorr(DT[subgroup][, !'Group', with=F])
# Faster way
rcorr(DT[subgroup, !'Group', with=F])
之后)。出于好奇,为什么会出现这种情况?使用额外的括号,subgroup
是否必须执行一些额外的计算?
答案 0 :(得分:5)
这是一个简单的解释:
# Slow way
rcorr(DT[subgroup][, !'Group', with=F])
第二组括号是DT
上的第二个操作,表示DT[subgroup]
从DT
创建新数据表,然后[, !'Group', with = F]
对该数据表进行操作,创建另一个新的数据表。因此速度下降。
# Faster way
rcorr(DT[subgroup, !'Group', with=F])
这种方式只能在DT
上一次性使用。