Re: [Rd] setting option in function

From: William Dunlap <wdunlap_at_tibco.com>
Date: Fri, 19 Oct 2012 23:18:12 +0000

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@r-project.org [mailto:r-devel-bounces@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



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 19 Oct 2012 - 23:20:45 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 19 Oct 2012 - 23:40:49 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive