使用表达式时R data.table'by'行为

时间:2015-03-03 15:45:45

标签: r data.table

在使用'时,我偶然发现了一种奇特的行为。在数据表中。如果有人可以解释以下行为,那就太棒了

我只是将列值汇总为两个正负的桶。

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'在最后一种情况下。 我在这里错过了什么?这不一致吗?

感谢

1 个答案:

答案 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列进行求和。数据表...