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

Christos Hatzis christos at nuverabio.com
Mon Dec 25 08:09:10 CET 2006


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 at gmail.com] 
Sent: Sunday, December 24, 2006 7:41 AM
To: jim holtman
Cc: christos at 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 at 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 at 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 at 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?
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



More information about the R-help mailing list