Re: [R] how to 'get' an object that is part of a list

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Mon 25 Dec 2006 - 13:33:54 GMT

my.length.2 also has the advantage of eliminating the eval.

On 12/25/06, Christos Hatzis <christos@nuverabio.com> wrote:
> Thank you Gabor. Very interesting solution.
> If I get it right, the first argument in function f is just a placeholder to
> help extract the right element out of the list(...) that is passed to
> length. Very smart trick.
>
> Jim's solution appears a bit simpler, at least along the lines that I was
> thinking:
>
> my.length <- function(...) {
> names <- as.character(substitute(list(...)))[-1]
> sapply(names, function(x){y <- eval(parse(text=x)); length(y)})
> }
>
> -Christos
>
> -----Original Message-----
> From: Gabor Grothendieck [mailto:ggrothendieck@gmail.com]
> Sent: Sunday, December 24, 2006 7:41 AM
> To: jim holtman
> Cc: christos@nuverabio.com;
> Subject: Re: [R] how to 'get' an object that is part of a list
>
> Is this what you are looking for:
>
> > my.length.2 <- function(...) {
> + f <- function(nm, val) length(val)
> + mapply(f, make.names(as.list(match.call()[-1])), list(...)) }
> > my.length.2(xx, xx$b)
> xx xx.b
> 2 5
>
> On 12/24/06, jim holtman <jholtman@gmail.com> wrote:
> > use 'eval' and 'parse'
> >
> >
> > > xx
> > $a
> > [1] 1 2 3 4 5
> >
> > $b
> > [1] "a" "b" "c" "d" "e"
> >
> > > eval(parse(text='xx$a'))
> > [1] 1 2 3 4 5
> > >
> >
> > So that way you can pass in the character string and then 'parse' it.
> >
> >
> >
> > On 12/24/06, Christos Hatzis <christos@nuverabio.com> wrote:
> > >
> > > This might be an trivial thing but I am stuck.
> > >
> > > Consider:
> > >
> > > xx <- list(a=1:5, b=letters[1:5])
> > >
> > > Although object xx is accessible through its name, how can object
> > > xx$b be accessed similarly through its name?
> > >
> > > > get("xx")
> > > $a
> > > [1] 1 2 3 4 5
> > >
> > > $b
> > > [1] "a" "b" "c" "d" "e"
> > >
> > > > get("xx$b")
> > > Error in get(x, envir, mode, inherits) : variable "xx$b" was not
> > > found
> > >
> > > get("xx")$b will not work in my case because it will probably
> > > require parsing to make it work within a function. E.g.
> > >
> > > my.length <- function(...) {
> > > names <- as.character(substitute(list(...)))[-1]
> > > sapply(names, FUN=function(x){y <- get(x); length(y)}) }
> > > > my.length(xx)
> > > xx
> > > 2
> > > > my.length(xx$a)
> > > Error in get(x, envir, mode, inherits) : variable "xx$a" was not
> > > found
> > > > my.length(xx$a, xx$b)
> > > Error in get(x, envir, mode, inherits) : variable "xx$a" was not
> > > found
> > >
> > > Thank you.
> > >
> > > Christos Hatzis, Ph.D.
> > > Nuvera Biosciences, Inc.
> > > 400 West Cummings Park
> > > Suite 5350
> > > Woburn, MA 01801
> > > Tel: 781-938-3830
> > > www.nuverabio.com
> > >
> > > ______________________________________________
> > > R-help@stat.math.ethz.ch 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.
> > >
> >
> >
> >
> > --
> > Jim Holtman
> > Cincinnati, OH
> > +1 513 646 9390
> >
> > What is the problem you are trying to solve?



R-help@stat.math.ethz.ch 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. Received on Tue Dec 26 00:42:00 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 25 Dec 2006 - 22:30:23 GMT.

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