Dear John,

You need to collect the return value when setting options. This will include an 
explicit NULL value for an option that was previously NULL. 

Best,

Greg Jefferis.

options(digits.secs = NULL)

noset2 = function() {
  opts <- options(digits.secs = 3)
  on.exit(options(opts))
  print(opts)
}

> getOption("digits.secs")
NULL
 
> noset2()
$digits.secs
NULL

> getOption("digits.secs")
NULL

Gregory Jefferis
Division of Neurobiology
MRC Laboratory of Molecular Biology
Francis Crick Avenue
Cambridge Biomedical Campus
Cambridge, CB2 OQH, UK

http://www2.mrc-lmb.cam.ac.uk/group-leaders/h-to-m/g-jefferis
http://jefferislab.org
https://www.zoo.cam.ac.uk/research/groups/connectomics


> On 11 Jul 2024, at 06:08, John Muschelli <muschell...@gmail.com> wrote:
> 
> When setting options in a function, I have always used the following:
>  opts <- options()
>  on.exit(options(opts), add = TRUE)
> and assumed it "reset" options to what they were prior to running the
> function.  But for some options that are set to NULL, it does not seem to
> reset them.  Specifically, I have found digits.secs to be set after this
> simple example below.  Is this expected behavior/documented?  Overall, this
> specific example (the one I encountered in the wild) is not that harmful,
> but I wanted to ask before I set a fix for this in our work
> 
> noset = function() {
>  opts = options()
>  print(opts$digits.secs)
>  on.exit(options(opts))
>  options(digits.secs = 3)
> }
> getOption("digits.secs")
> #> NULL
> noset()
> #> NULL
> getOption("digits.secs")
> #> [1] 3
> 
> 
> John Muschelli, PhD
> Associate Research Professor
> Department of Biostatistics
> Johns Hopkins Bloomberg School of Public Health
> 
> [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-package-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to