I just realised that I sent it only to MatthewDowle. So, sending it again. 
Sorry @Matthew for the double email. 

Matthew,

>> .BY is available to j already for that reason, does that work? .BY isn't a 
>> column of .SD because i) it's the same value for every row of .SD i.e. 
>> .BY[[1]] is length 1 and contains this particular group (replicating the 
>> same value would be wasteful)

DT[, print(.BY), by = list(grp = x %/% 2)]
$grp
[1] 0

$grp
[1] 1

$grp
[1] 2


DT[, print(.SD), by = list(grp = x %/% 2)] # no column "x"
   y
1: 6
   y
1: 7
2: 8
    y
1:  9
2: 10


My question is not as to why the BY column is not available in .SD. Rather, 
since .BY does not have column "x" in it (rather the result of x%/% 2), why 
does .SD not have "x"? It's as if grp = x%/%2 is a "new column". So, "x" should 
be available to .SD is my point.

>> but more significantly  ii) it is often a character group name where running 
>> an aggregation function like sum() would trip up on it.

Again, I don't think so because, I am not asking for .BY columns to be in .SD.
DT[, grp := x%/% = 2]
DT[, lapply(.SD, sum), by=grp]

must be equal to:

DT[, lapply(.SD, sum), by = list(grp = x%/%2)] # here, "x" should be available 
to .SD as it's not the grouping column

Arun

_______________________________________________
datatable-help mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help

Reply via email to