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
setting option in function
4 messages · Charles Geyer, Thomas Lumley, William Dunlap
old_options <- options(na.action=na.fail)
on.exit(options(old_options))
You can also use this to define a wrapper that executes an expression
using special options
withOptions<-function(optlist,expr){
oldopt<-options(optlist)
on.exit(options(oldopt))
expr<-substitute(expr)
eval.parent(expr)
}
-thomas
On Sat, Oct 20, 2012 at 10:35 AM, Charles Geyer <charlie at stat.umn.edu> wrote:
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
Thomas Lumley Professor of Biostatistics University of Auckland
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20121019/54e5f715/attachment.pl>
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