[Rd] External special functions (SPECIALSXP)

William Dunlap wdunlap at tibco.com
Wed May 25 20:24:36 CEST 2011



Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> -----Original Message-----
> From: William Dunlap 
> Sent: Wednesday, May 25, 2011 11:20 AM
> To: 'Peter Danenberg'
> Cc: r-devel at r-project.org
> Subject: RE: [Rd] External special functions (SPECIALSXP)
> 
> > f <- function(...) {
> +     dotArgList <- substitute(list(...))
> +     dotArgList
> + }
> > f(cat("foo\n"), stop("Oops"), warning("Hmm"))
> list(cat("foo\n"), stop("Oops"), warning("Hmm"))
> > # i.e., no argument was evaluated

Or, if you'd prefer a pairlist over a call to list:
  > fp <- function(...) {
  +     dotArgList <- substitute(...())
  +     dotArgList
  + }
  > fp(message=cat("foo\n"), error=stop("Oops"),
possibleProblem=warning("Hmm"))
  $message
  cat("foo\n")

  $error
  stop("Oops")
  
  $possibleProblem
  warning("Hmm")

  > class(.Last.value)
  [1] "pairlist"
I would not have thought of this syntax myself but have
seen it in other folks' code.

> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com  
> 
> > -----Original Message-----
> > From: r-devel-bounces at r-project.org 
> > [mailto:r-devel-bounces at r-project.org] On Behalf Of Peter Danenberg
> > Sent: Wednesday, May 25, 2011 11:06 AM
> > To: Duncan Murdoch
> > Cc: r-devel at r-project.org
> > Subject: Re: [Rd] External special functions (SPECIALSXP)
> > 
> > > However, if you don't want to evaluate the arguments, just pass
> > > substitute(arg) to your function instead of arg.
> > 
> > Thanks, Duncan; the problem is, I'm trying to substitute on 
> `...' and
> > I don't think I can access `...' without inadvertently 
> evaluating it.
> > 
> > I'm trying to write a debugging function which, given any number of
> > expressions, prints the expression next to its evaluation.
> > 
> > This is trivial to do in the single arity case:
> > 
> >   debug <- function(expression) {
> >     cat(substitute(expression), expression, "\n")
> >   }
> > 
> >   a <- 2
> >   debug(a)
> > 
> >   a 2
> > 
> > but I'm not sure how to make it work with variable arity without
> > resorting to SPECIALSXP.
> > 
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> > 



More information about the R-devel mailing list