On 27/02/2015 1:18 PM, Brian Trautman wrote:
This should be a simple question, but I am at my wits end.
dt<-data.table(a=rep(1:10, 26), b=1:260, c=rep(1:2, 130))
sumvar <- 'mysum'
bvar <- 'b'
dt_min <- dt[, list(sumvar = sum(get(bvar))), by=list(a)]
print(dt_min)
I want the function to return two variables, "a" and "mysum". However,
instead returns "a" and "sumvar", rather than evaluating "sumvar".
If I try replacing it with "get(sumvar)" or "eval(sumvar)", R just throws
an error. What am I missing?
a sumvar
1: 1 3276
2: 2 3302
3: 3 3328
4: 4 3354
5: 5 3380
6: 6 3406
7: 7 3432
8: 8 3458
9: 9 3484
10: 10 3510
I don't know the data.table function, but
list(sumvar = sum(get(bvar)))
will produce a list with one element named sumvar, holding the sum of
values of a variable named 'b'. If you want that element to be named
'mysum', you could change it at the end, or construct that list as
structure(list(sum(get(bvar))), names=sumvar)
i.e. the full expression would be
dt_min <- dt[, structure(list(sum(get(bvar))), names=sumvar), by=list(a)]
The idea is that structure() produces list(sum(get(bvar))) with
attribute "names" set to the contents of sumvar.
Duncan Murdoch