[R] Trouble passing list or non-list to function using ...

Gabor Grothendieck ggrothendieck at gmail.com
Sat May 27 14:06:14 CEST 2006


Is this what you want:
For each component of the dotlist check whether its name exists in
the caller's environment as an R object and if it exists then use the
contents of that object coerced to character as the name of the
component; otherwise, use the component name as given.

If that's it then try this:

testme <- function(...) {
   dotlist <- list(...)
   names(dotlist) <- sapply(names(dotlist),
      function(x) if (exists(x)) as.character(get(x, envir = parent.frame()))
         else x)
      dotlist
},
envir = baseenv())

if (exists("nm")) rm(nm)
testme(nm = NA) # list(nm = NA)
nm <- "age"
testme(nm = NA) # list(age = NA)



On 5/27/06, Jason Barnhart <jasoncbarnhart at msn.com> wrote:
> Sorry about that. I'm trying to pass a "tag=value" argument to a function
> which creates a list using list(...).
> Specifically, it's necessary for "tag" to become the name of the list
> component - I'm not sure I'm using the right nomenclature.
>
> I can make the call work explicitly here.  But I would like to loop through
> a list and pass list values to the function instead.
>
>    testme<-function(...){
>        dotlist<-list(...)
>        dotlist
>    }
>
> Here's the desired output.
>     > testme(age=NA)
>         $age
>         [1] NA
>
> Unfortunately, this doesn't work.
>    nm<-age
>    testme(nm=NA)
>     $nm
>     [1] NA
>
> Please let me know if further clarification is needed.
> I've tried various ways to pass the 'tag=value'; e.g. using list(nm=NA) and
> so on, with no success
> Thanks again,
> -jason
>
>
> ----- Original Message -----
> From: "Gabor Grothendieck" <ggrothendieck at gmail.com>
> To: "Jason Barnhart" <jasoncbarnhart at msn.com>
> Cc: <r-help at stat.math.ethz.ch>
> Sent: Friday, May 26, 2006 6:04 PM
> Subject: Re: [R] Trouble passing list or non-list to function using ...
>
>
> Its not clear from your post which of the tests does not give you
> the desired output and what the desired output is in that case.
>
> Just guessing but maybe you meant to use testlist[[i]] instead of
> testlist[i] in
> the loop?
>
>
> On 5/26/06, Jason Barnhart <jasoncbarnhart at msn.com> wrote:
> > Hello,
> >
> > Simply put, I'm trying to call a function "testme" with value "age=NA".
> > I wish to use "dotlist<-list(...)"  inside the function and have dotlist
> > become:
> > $age
> > [1] NA
> >
> > I'm modifying existing code and need to minimize changing that code so
> > it's easiest to conform
> > how I call the existing function.
> >
> > My sample code fragment, results, and R.version information are listed
> > below.   I've been searching
> > for prior questions regarding this phenomena, but haven't quite figured
> > out how to do this.
> >
> > Thank you in advance,
> > -jason
> >
> >
> >
> > ##BEGIN TEST CODE
> > ###########################################################
> > testme<-function(...){
> >
> > dotlist<-list(...)
> >
> >    dotlist
> >
> > }
> >
> > nm<-"age"
> >
> > testme(age=NA)
> >
> > testme(nm=NA)
> >
> > testme(age=NA,age2=NA)
> >
> > testlist<-list("age","age2")
> >
> > for (i in 1:length(testlist)){
> >
> >    print(testme(testlist[i]))
> >
> > }
> >
> > ##END TEST CODE
> > #############################################################
> >
> > ##BEGIN RESULTS
> > #############################################################
> > > testme<-function(...){
> > +
> > + dotlist<-list(...)
> > +
> > +     dotlist
> > +
> > + }
> > >
> > > nm<-"age"
> > >
> > > testme(age=NA)   *****This is what I'm really after****
> > $age
> > [1] NA
> >
> > >
> > > testme(nm=NA)
> > $nm
> > [1] NA
> >
> > > #trying w/ 2 vars
> > > testme(age=NA,age2=NA)
> > $age
> > [1] NA
> >
> > $age2
> > [1] NA
> >
> > >
> > > testlist<-list("age","age2")
> > >
> > > for (i in 1:length(testlist)){
> > +
> > +     print(testme(testlist[i]))
> > +
> > + }
> > [[1]]
> > [[1]][[1]]
> > [1] "age"
> >
> >
> > [[1]]
> > [[1]][[1]]
> > [1] "age2"
> >
> > ##END RESULTS
> > ###############################################################
> >
> > platform       i386-pc-mingw32
> > arch           i386
> > os             mingw32
> > system         i386, mingw32
> > status
> > major          2
> > minor          3.0
> > year           2006
> > month          04
> > day            24
> > svn rev        37909
> > language       R
> > version.string Version 2.3.0 (2006-04-24)
> >
> >        [[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
> >
>



More information about the R-help mailing list