R i或j上的子集与.SD的区别和用法

R i或j上的子集与.SD的区别和用法,r,data.table,R,Data.table,使用.SD对i和j进行子集设置是否有任何区别,例如在下面的代码片段中?在这种情况下,一个会比另一个更受欢迎,因为它们对我来说似乎完全相同 library(data.table) dat <- data.table(c("a", "a", "", "b", "b", "c", "d"), c(1, 1, 1, 1, 2, 3, 4), c(11, 11, 11, 11, 12, 12, 14),

使用
.SD
i
j
进行子集设置是否有任何区别,例如在下面的代码片段中?在这种情况下,一个会比另一个更受欢迎,因为它们对我来说似乎完全相同

library(data.table)   
dat <- data.table(c("a", "a", "", "b", "b", "c", "d"),
                  c(1, 1, 1, 1, 2, 3, 4),
                  c(11, 11, 11, 11, 12, 12, 14),
                  i = 1:7)
identical(dat[, .SD[V2 == 1]], dat[V2 == 1])
# TRUE
库(data.table)

一到两微秒?对于
idential(dat[,.SD[V2==1,V3]],dat[V2==1,V3])
,我也会得到TRUE。SD包括分组中未包括的所有列(除非.SDcols用于指定列的子集)。在你的例子中,你没有按变量分组,也没有使用.SDcols,所以没有区别。如果你有一个
by=
,那么
i
肯定会好得多,因为
[
有很多开销,每个组都会被调用。否则,我认为42-是对的。也许一两微秒?我对
也会这样(dat[,.SD[V2==1,V3]],dat[V2==1,V3])
.SD包括分组中未包括的所有列(除非.SDcols用于指定列的子集)。在您的情况下,您没有按变量分组,也没有使用.SDcols,因此没有区别。如果您有一个
by=
,那么
i
肯定会更好,因为
[
有很多开销,每个组都会被调用。否则,我认为42-是正确的。