gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:50:46 24 4
gpt4 key购买 nike

我在数据表中使用“by”时偶然发现了一个奇怪的行为。如果有人可以解释以下行为,那就太好了

我只是将一列值汇总到正负两个桶中。

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'。我在这里错过了什么?这不是不一致的行为吗?

谢谢

最佳答案

看看

dt[, names(.BY), by=(b>0)]
# b V1
# 1: FALSE b
# 2: TRUE b

对比

dt[, names(.BY), by=I(b>0)]
# I V1
# 1: FALSE I
# 2: TRUE I

我认为在第一种情况下,它会覆盖变量 b,因此当您调用 dt[, sum(b), by=(b>0)] 它对 BY 变量求和而不是数据表的列 b...

关于R data.table 'by' 使用表达式时的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com