From: Duncan Murdoch <murdoch.duncan_at_gmail.com>

Date: Tue, 21 Aug 2012 15:34:13 -0400

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 22 Aug 2012 - 13:51:03 GMT

Date: Tue, 21 Aug 2012 15:34:13 -0400

On 12-08-18 12:33 PM, Martin Maechler wrote:

>>>>>> Joshua Ulrich <josh.m.ulrich@gmail.com>

*>>>>>> on Sat, 18 Aug 2012 10:16:09 -0500 writes:
**>
**> > I don't know if this is better, but it's the most obvious/shortest I
**> > could come up with. Transpose the data.frame column to a 'row' vector
**> > and drop the dimensions.
**>
**> R> identical(nv, drop(t(df)))
**> > [1] TRUE
**>
**> Yes, that's definitely shorter,
**> congratulations!
**>
**> One gotta is that I'd want a solution that also works when the
**> df has more columns than just one...
**>
**> Your idea to use t(.) is nice and "perfect" insofar as it
**> coerces the data frame to a matrix, and that's really the clue:
**>
**> Where as df[,1] is losing the names,
**> the matrix indexing is not.
**> So your solution can be changed into
**>
**> t(df)[1,]
**>
**> which is even shorter...
**> and slightly less efficient, at least conceptually, than mine, which has
**> been
**>
**> as.matrix(df)[,1]
**>
**> Now, the remaining question is: Shouldn't there be something
**> more natural to achieve that?
**> (There is not, currently, AFAIK).
*

I've been offline, so I'm a bit late to this game, but the examples above fail when df contains a character column as well as the desired one, because everything gets coerced to a character matrix. You need to select the column first, then convert to a matrix, e.g.

drop(t(df[,1,drop=FALSE]))

Duncan Murdoch

*>
*

> Martin

*>
**>
**> > Best,
**> > --
**> > Joshua Ulrich | about.me/joshuaulrich
**> > FOSS Trading | www.fosstrading.com
**>
**>
**> > On Sat, Aug 18, 2012 at 10:03 AM, Martin Maechler
**> > <maechler_at_stat.math.ethz.ch> wrote:
**> >> Today, I was looking for an elegant (and efficient) way to get a named
**> >> (atomic) vector by selecting one column of a data frame. Of course,
**> >> the vector names must be the rownames of the data frame.
**> >>
**> >> Ok, here is the quiz, I know one quite "cute"/"slick" answer, but was
**> >> wondering if there are obvious better ones, and also if this should
**> >> not become more idiomatic (hence "R-devel"):
**> >>
**> >> Consider this toy example, where the dataframe already has only one
**> >> column :
**> >>
**> >>> nv <- c(a=1, d=17, e=101); nv
**> >> a d e
**> >> 1 17 101
**> >>
**> >>> df <- as.data.frame(cbind(VAR = nv)); df
**> >> VAR
**> >> a 1
**> >> d 17
**> >> e 101
**> >>
**> >> Now how, can I get 'nv' back from 'df' ? I.e., how to get
**> >>
**> >>> identical(nv, .......)
**> >> [1] TRUE
**> >>
**> >> where ...... only uses 'df' (and no non-standard R packages)?
**> >>
**> >> As said, I know a simple solution (*), but I'm sure it is not
**> >> obvious to most R users and probably not even to the majority of
**> >> R-devel readers... OTOH, people like Bill Dunlap will not take
**> >> long to provide it or a better one.
**> >>
**> >> (*) In my solution, the above '.......' consists of 17 letters.
**> >> I'll post it later today (CEST time) ... or confirm
**> >> that someone else has done so.
**> >>
**> >> Martin
**> >>
**> >> ______________________________________________
**> >> R-devel_at_r-project.org mailing list
**> >> **https://stat.ethz.ch/mailman/listinfo/r-devel
**>
**> ______________________________________________
**> R-devel_at_r-project.org mailing list
**> https://stat.ethz.ch/mailman/listinfo/r-devel
**>
*

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 22 Aug 2012 - 13:51:03 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

*
Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.
Archive generated by hypermail 2.2.0, at Wed 22 Aug 2012 - 17:40:40 GMT.
*

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*