[R] Variable Column Names and Lists
Duncan Murdoch
murdoch.duncan at gmail.com
Fri Feb 27 19:47:15 CET 2015
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, it
> 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
More information about the R-help
mailing list