[R] Referencing function name from within function

rolf at math.unb.ca rolf at math.unb.ca
Tue Apr 3 18:18:44 CEST 2007


Wott about this then?

myfunction <- function(x){
        temp <- sys.calls()[[1]]
        nm <- temp[length(temp)]
        a  <- TRUE
        if (a){
                stop(paste(nm,"requires xyz!"))
        }
}

> myfunction()
Error in myfunction() : myfunction requires xyz!

> lapply(1:10,myfunction)
Error in FUN(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)[[1]], ...) : 
        myfunction requires xyz!

                                cheers,

                                        Rolf Turner
                                        rolf at math.unb.ca

===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===
Prof Brian Ripley wrote:

> This presumes a function is always called by name.  Try
> 
> > lapply(1:10, myfunction)
> Error in FUN(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)[[1]], ...) :
>          FUN requires xyz!
> 
> to see a (simple case of) the problem.
> 
> On Tue, 3 Apr 2007, rolf at math.unb.ca wrote:
> 
> > I dunno much about such things, but a wee experiment seems to
> > indicate that the following structure does what you want:
> >
> >        myfunction <- function(x){
> >                nm <- as.character(match.call())[1]
> >                a  <- TRUE
> >                if (a){
> >                        stop(paste(nm,"requires xyz!"))
> >                }
> >        }
> >
> >                                cheers,
> >
> >                                        Rolf Turner
> >                                        rolf at math.unb.ca
> >
> > ===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===
> > Original message:
> >
> >> For verbose coding I'd like to do something like:
> >>> myfunction <- function(x){
> >>>       if (a){
> >>>               stop(paste(myfunction_name_here,"requires xyz!")
> >>>       }
> >> Is that possible?
> >
> >        (Note:  In R *all* things are possible!)
> 
> I don't believe so.



More information about the R-help mailing list