[R] cbind in aggregate formula - based on an existing object (vector)

Bert Gunter gunter.berton at gene.com
Thu Jul 14 21:58:16 CEST 2011


Dmitri:

Look at my vars from myvars<-c("value1","value2")
It's just a character vector of length 2!

You can't cbind a character vector of length 2! These are not
references/pointers.

It's not at all clear to me what you ultimately want to do, but IF
it's: pass a character vector of names to be used as the LHS of the
aggregate .formula call, then something like: (untested)

MyVars <- do.call(cbind, lapply(myvars,get))

and then

aggregate(MyVars ~ ...)

might do. But there are so many potential scoping problems here that I
would not be surprised if it failed. The usual advice for this sort of
thing is to use substitute() or maybe the dreaded eval(parse(...))
construction -- but as I said, I don't really understand what you're
after.

-- Bert



On Thu, Jul 14, 2011 at 12:32 PM, Dimitri Liakhovitski
<dimitri.liakhovitski at gmail.com> wrote:
> Thank you, David, it does work.
> Could you please explain why? What exactly does changing it to "as matrix" do?
> Thank you!
> Dimitri
>
> On Thu, Jul 14, 2011 at 3:25 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>>
>> On Jul 14, 2011, at 3:05 PM, Dimitri Liakhovitski wrote:
>>
>>> Hello!
>>>
>>> I am aggregating using a formula in aggregate - of the type:
>>> aggregate(cbind(var1,var2,var3)~factor1+factor2,sum,data=mydata)
>>>
>>> However, I actually have an object (vector of my variables to be
>>> aggregated):
>>> myvars<-c("var1","var2","var3")
>>>
>>> I'd like my aggregate formula (its "cbind" part) to be able to use my
>>> "myvars" object. Is it possible?
>>> Thanks for your help!
>>>
>>
>> Not sure I have gotten all the way there, but this does work:
>>
>> example.agg1<-aggregate(as.matrix(example[myvars])~group+mydate,sum,data=example)
>>
>>> example.agg1
>>   group     mydate example[myvars]    NA
>> 1 group1 2008-12-01               4   4.2
>> 2 group2 2008-12-01               6   6.2
>> 3 group1 2009-01-01              40  40.2
>> 4 group2 2009-01-01              60  60.2
>> 5 group1 2009-02-01             400 400.2
>> 6 group2 2009-02-01             600 600.2
>>
>>> Dimitri
>>>
>>> Reproducible example:
>>>
>>> mydate = rep(seq(as.Date("2008-12-01"), length = 3, by = "month"),4)
>>> value1=c(1,10,100,2,20,200,3,30,300,4,40,400)
>>> value2=c(1.1,10.1,100.1,2.1,20.1,200.1,3.1,30.1,300.1,4.1,40.1,400.1)
>>>
>>> example<-data.frame(mydate=mydate,value1=value1,value2=value2)
>>>
>>> example$group<-c(rep("group1",3),rep("group2",3),rep("group1",3),rep("group2",3))
>>> example$group<-as.factor(example$group)
>>> (example);str(example)
>>>
>>>
>>> example.agg1<-aggregate(cbind(value1,value2)~group+mydate,sum,data=example)
>>> # this works
>>> (example.agg1)
>>>
>>> ### Building my object (vector of 2 names - in reality, many more):
>>> myvars<-c("value1","value2")
>>> example.agg1<-aggregate(cbind(myvars)~group+mydate,sum,data=example)
>>> ### does not work
>>>
>>>
>>> --
>>> Dimitri Liakhovitski
>>> Ninah Consulting
>>> www.ninah.com
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>>
>
>
>
> --
> Dimitri Liakhovitski
> Ninah Consulting
> www.ninah.com
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
"Men by nature long to get on to the ultimate truths, and will often
be impatient with elementary studies or fight shy of them. If it were
possible to reach the ultimate truths without the elementary studies
usually prefixed to them, these would not be preparatory studies but
superfluous diversions."

-- Maimonides (1135-1204)

Bert Gunter
Genentech Nonclinical Biostatistics
467-7374
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list