在使用'时,我偶然发现了一种奇特的行为。在数据表中。如果有人可以解释以下行为,那就太棒了
我只是将列值汇总为两个正负的桶。
dt = data.table(a=sample(letters, 100, replace=T), b= (-49:50), c=(-49:50))
以下所有工作
dt[, sum(b), by=as.logical(b>0)];
dt[, sum(b), by=as.factor(b>0)];
compFun = function(x,y) x>y; dt[, sum(b), by=compFunc(b,0)];
#FALSE -1225
#TRUE 1275
但这不是
dt[, sum(b), by=(b>0)];
#TRUE 1
#FALSE 0
看起来.SD没有列' b'在最后一种情况下。 我在这里错过了什么?这不一致吗?
感谢
答案 0 :(得分:0)
看看
dt[, names(.BY), by=(b>0)]
# b V1
# 1: FALSE b
# 2: TRUE b
VS
dt[, names(.BY), by=I(b>0)]
# I V1
# 1: FALSE I
# 2: TRUE I
我认为在第一种情况下它会覆盖变量b
,因此当您调用dt[, sum(b), by=(b>0)]
时,它会对BY
变量而不是b
列进行求和。数据表...