[R] Limiting the scope of RNGkind/set.seed

Elizabeth Purdom epurdom @end|ng |rom @t@t@berke|ey@edu
Tue Apr 16 18:12:49 CEST 2019


Hello,

I have a package, and inside of it I have a small function that selects a random palette of colors for graphing purposes. It’s a large number of colors, which is why I don’t manually select them, but I did want them to stay constant so I set the seed before doing so. So I had a little function in my package that does this:

.rcolors<-function(){
	set.seed(23589)
	x<-sample(colors()[-c(152:361)])
	return(x)
}
massivePalette<-unique(c(bigPalette,.rcolors()))

Now that the sample function has been changed in R 3.6, I would need to use `sample.kind=“Rounding”` to get the same set of colors as I had previously. However, I don’t want to do that in my package, because that appears to change the global environment sampling:

> RNGkind()
[1] "Mersenne-Twister" "Inversion"        "Rejection"       
> RNGkind(sample.kind="Rejection")
> x<-clusterExperiment:::.rcolors() #now I have changed the function so that sample.kind=“Rounding” — I’ve suppressed the warnings
> RNGkind()
[1] "Mersenne-Twister" "Inversion"        "Rounding”  

So I could do something like this:

.rcolors<-function(){
	currentRNG<-RNGkind()
	suppressWarnings(RNGkind(sample.kind="Rounding"))
	set.seed(23589)
	x<-sample(colors()[-c(152:361)])
	#set it back to default
	suppressWarnings(RNGkind(sample.kind=currentRNG[3]))
	return(x)
}

But is there a way to change the random sampling in the function environment and not change it in the global environment? (For this function, I can just break down and accept that I will have different colors from this point on, but I’d like to know more generally; especially since it means that my `fixed` colors are not really fixed since they depend on the user’s setting of random sampling techniques, which I hadn’t considered before). 

All of the best,
Elizabeth Purdom



More information about the R-help mailing list