[Rd] setting option in function

William Dunlap wdunlap at tibco.com
Sat Oct 20 01:18:12 CEST 2012


Hi Charley,

You can use the idiom
   oldNaAction <- options(na.action=na.fail)
   on.exit(options(oldNaAction))
or the slightly safer (protected again an interrupt
between the first two lines or an error calling options
to set them)
   oldNaAction <- getOption("na.action")
   on.exit(options(oldNaAction))
   options(na.action=na.fail)
.
I prefer to bury it in a function like
   withOption <- function(optionList, expr) {
       stopifnot(is.list(optionList))
       oldOptionList <- options(names(optionList))
       on.exit(options(oldOptionList))
       options(optionList)
       expr # lazily evaluate now
   }
used as
  > getOption("na.action")
  [1] "na.omit"
  > withOption(list(na.action = "na.fail"), lm(y~x, data=data.frame(x=c(1,2,NA), y=1:3)))
  Error in na.fail.default(list(y = 1:3, x = c(1, 2, NA))) : 
    missing values in object
  > withOption(list(na.action = "na.exclude"), lm(y~x, data=data.frame(x=c(1,2,NA), y=1:3)))  

  Call:
  lm(formula = y ~ x, data = data.frame(x = c(1, 2, NA), y = 1:3))
  
  Coefficients:
  (Intercept)            x  
            0            1  

  > getOption("na.action")
  [1] "na.omit"

The function makes it  less painful to use the safer version and you
don't have to worry about a subsequent call to on.exit()
wiping out the current request to do something on exiting
the function.

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 Charles Geyer
> Sent: Friday, October 19, 2012 2:35 PM
> To: r-devel at r-project.org
> Subject: [Rd] setting option in function
> 
> is it possible to set an option inside a function ((I want to set
> na.action = na.fail) and have the previous state restored if there is
> an error so that the function doesn't change the option behind the
> user's back?
> 
> Sorry if this has been answered before, but this subject is hard to Google.
> 
> --
> Charles Geyer
> Professor, School of Statistics
> University of Minnesota
> charlie at stat.umn.edu
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list