添加括号时,子集"data.table"的速度会降低

Chr*_*son 6 r data.table

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

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

# Faster way
rcorr(DT[subgroup, !'Group', with=F])
Run Code Online (Sandbox Code Playgroud)

(差异在于之后subgroup).出于好奇,为什么会出现这种情况?使用额外的括号,是否data.table必须执行一些额外的计算?

Ric*_*ven 5

这是一个简单的解释:

# Slow way
rcorr(DT[subgroup][, !'Group', with=F])
Run Code Online (Sandbox Code Playgroud)

第二组括号是第二个操作DT,意味着从该DT[subgroup]数据表创建新数据表DT,然后[, !'Group', with = F]对该数据表进行操作,从而创建另一个新数据表.因此速度下降.

# Faster way
rcorr(DT[subgroup, !'Group', with=F])
Run Code Online (Sandbox Code Playgroud)

这种方式只能DT一次性运行.