[R] How to assess object names within a function in lapply or l_ply?

Heinz Tuechler tuechler at gmx.at
Mon Sep 28 15:59:01 CEST 2009


Henrique,

based on your solution I found out, how to avoid to name explicitly the object.

lapply(data.frame(a=1:3, b=2:4), function(x)
   names(eval(as.list(sys.call(-1))[[2]]))
        [as.numeric(gsub("[^0-9]", "", deparse(substitute(x))))]
)

Thanks,
Heinz

At 13:57 28.09.2009, Henrique Dallazuanna wrote:
>Heinz,
>
>Try this:
>
>lapply(DF, function(x)names(DF)[as.numeric(gsub("[^0-9]", "",
>deparse(substitute(x))))])
>
>On Mon, Sep 28, 2009 at 8:43 AM, Heinz Tuechler <tuechler at gmx.at> wrote:
> > Thank you, Henrique,
> >
> > my example was simplified. In a more complexe function I want to use the
> > objects, not just their names. In your solution, I have to adapt the
> > function itself, depending on the name of the 
> data.frame, which I would like
> > to avoid.
> >
> > Thanks,
> > Heinz
> >
> >
> > At 13:36 28.09.2009, Henrique Dallazuanna wrote:
> >>
> >> You can use names insteed:
> >>
> >> DF <- data.frame(a=1:3, b=2:4)
> >> lapply(names(DF), function(x){
> >>                                print(x)
> >>                                DF[x]
> >>                        })
> >>
> >> On Mon, Sep 28, 2009 at 8:22 AM, Heinz Tuechler <tuechler at gmx.at> wrote:
> >> > Dear All,
> >> >
> >> > to produce output of several columns of a data frame, I tried to use
> >> > lapply
> >> > and also l_ply. In both cases, I would like to print a header line
> >> > containing also the name of the respective column in the data frame.
> >> >
> >> > For example, I would like the following
> >> >
> >> > lapply(data.frame(a=1:3, b=2:4), function(x)
> >> > print(deparse(substitute(x))))
> >> >
> >> > to produce:
> >> > [1] "a"
> >> > [1] "b"
> >> >
> >> > and not, what it actually does:
> >> > [1] "X[[1L]]"
> >> > [1] "X[[2L]]"
> >> > $a
> >> > [1] "X[[1L]]"
> >> >
> >> > $b
> >> > [1] "X[[2L]]"
> >> >
> >> > or with l_ply (plyr package)
> >> > l_ply(data.frame(a=1:3, b=2:4), function(x)
> >> > print(deparse(substitute(x))))
> >> >
> >> > to produce:
> >> > [1] "a"
> >> > [1] "b"
> >> >
> >> > and not, what it actually does:
> >> > [1] ".data[[i]]"
> >> > [1] ".data[[i]]"
> >> >
> >> > Is this possible?
> >> >
> >> > Thanks,
> >> > Heinz
> >> >
> >> > ______________________________________________
> >> > 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.
> >> >
> >>
> >>
> >>
> >> --
> >> Henrique Dallazuanna
> >> Curitiba-Paraná-Brasil
> >> 25° 25' 40" S 49° 16' 22" O
> >
> >
> >
>
>
>
>--
>Henrique Dallazuanna
>Curitiba-Paraná-Brasil
>25° 25' 40" S 49° 16' 22" O




More information about the R-help mailing list