[R] binding vectors or matrix using their names
Bill.Venables@csiro.au
Bill.Venables at csiro.au
Thu Mar 25 03:10:20 CET 2004
Goodness Patrick, this must surely qualify for the obfuscated R competition finals. I love it!
There are two solutions I can think of with do.call and here they are:
> x <- 1
> x2 <- runif(10)
> x12 <- c("x", "x2")
> do.call("cbind", lapply(x12, as.name))
x x2
[1,] 1 0.99327265
[2,] 1 0.63260097
[3,] 1 0.17411170
[4,] 1 0.54635634
[5,] 1 0.75603670
[6,] 1 0.27739270
[7,] 1 0.32125068
[8,] 1 0.01326344
[9,] 1 0.37519602
[10,] 1 0.11133052
> do.call("cbind", lapply(x12, get))
[,1] [,2]
[1,] 1 0.99327265
[2,] 1 0.63260097
[3,] 1 0.17411170
[4,] 1 0.54635634
[5,] 1 0.75603670
[6,] 1 0.27739270
[7,] 1 0.32125068
[8,] 1 0.01326344
[9,] 1 0.37519602
[10,] 1 0.11133052
>
I suspect the first offers a few advantages over the second, (which some other people have implicitly suggested). The first preserves the names in the result. Also, if the vectors are large, the second constructs a large language object and then evaluates it to get a large result. The first uses the names rather than the objects themselves, so at least the language object is small, even if the result is not.
A more serious, philosophical word on Patrick's solution. It is rarely necessary (in my limited experience, sure) to have to use parse() like this. Where it provides a quick (kludgy?) solution I often find it a useful exercise to consider alternatives. They often come out simpler and you nearly always pick up something useful in the process.
Bill V.
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Patrick Burns
Sent: Thursday, 25 March 2004 7:02 AM
To: Stephane DRAY
Cc: r-help at stat.math.ethz.ch; Stephane DRAY; Tom Blackwell
Subject: Re: [R] binding vectors or matrix using their names
I think you are looking for the eval-parse-text idiom:
eval(parse(text=paste("cbind(", paste(my.names, collapse=", "), ")")))
Patrick Burns
Burns Statistics
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")
Stephane DRAY wrote:
> Hi Tom,
>
> Your approach did not work,
>
> > do.call("cbind", as.list(my.names))
> [,1] [,2]
> [1,] "x" "x2"
>
> but it helps me a lot to find the good one:
>
> do.call("cbind", as.list(parse(text=my.names)))
>
> Thanks,
>
>
> At 14:56 24/03/2004, Tom Blackwell wrote:
>
>> I believe the syntax is
>>
>> result <- do.call(cbind, as.list(my.names))
>>
>> Haven't checked this on your example, though.
>>
>> - tom blackwell - u michigan medical school - ann arbor -
>>
>> On Wed, 24 Mar 2004, Stephane DRAY wrote:
>>
>> > Hello list,
>> > I have two vectors x and x2:
>> >
>> > x=runif(10)
>> > x2=runif(10)
>> >
>> > and one vectors with their names :
>> >
>> > my.names=c("x","x2")
>> >
>> > I would like to cbind these two vectors using their names contained
>> in the
>> > vector my.names.
>> > I can create a string with comma
>> > ncomma=paste(my.names,collapse=",")
>> >
>> > and now, I just need a function to transform this string into a
>> adequate
>> > argument for cbind:
>> >
>> > cbind(afunction(ncomma))
>> >
>> > Is there in R a function that can do the job ? If not, how can I do
>> it ??
>> >
>> > Thanks in advance,
>> > Sincerely.
>> >
>> >
>> > Stéphane DRAY
>> >
>> ---------------------------------------------------------------------
>> -----------------------------
>>
>> >
>> > Département des Sciences Biologiques
>> > Université de Montréal, C.P. 6128, succursale centre-ville
>> > Montréal, Québec H3C 3J7, Canada
>> >
>> > Tel : 514 343 6111 poste 1233
>> > E-mail : stephane.dray at umontreal.ca
>> >
>> ---------------------------------------------------------------------
>> -----------------------------
>>
>> >
>> > Web
>> http://www.steph280.freesurf.fr/
>> >
>> > ______________________________________________
>> > R-help at stat.math.ethz.ch mailing list
>> > https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide!
>> http://www.R-project.org/posting-guide.html
>> >
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide!
>> http://www.R-project.org/posting-guide.html
>
>
> Stéphane DRAY
> ----------------------------------------------------------------------
> ----------------------------
>
> Département des Sciences Biologiques
> Université de Montréal, C.P. 6128, succursale centre-ville Montréal,
> Québec H3C 3J7, Canada
>
> Tel : 514 343 6111 poste 1233
> E-mail : stephane.dray at umontreal.ca
> ----------------------------------------------------------------------
> ----------------------------
>
> Web
> http://www.steph280.freesurf.fr/
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
>
______________________________________________
R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help
mailing list