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
I think I'm missing something. Why does something like this not do what you want:> RNGkind()[1] "Mersenne-Twister" "Inversion"> f <- function(){+ cur <- RNGkind(NULL)[1] + RNGkind("Super-Duper") + print(RNGkind()) + RNGkind(cur) + }> f()[1] "Super-Duper" "Inversion"> RNGkind()[1] "Mersenne-Twister" "Inversion" Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Tue, Apr 16, 2019 at 9:13 AM Elizabeth Purdom <epurdom at stat.berkeley.edu> wrote:> 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 > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Hi Bert, Thanks for your response. What you suggest is more or less the fix I suggested in my email (my second version of .rcolors). I writing more because I was wondering if there was a better way to work with RNG that would avoid doing that. It doesn?t feel very friendly for my package to be making changes to the user?s global environment, even though I am setting them back (and if it weren?t for the fact that setting the new R 3.6 argument `sample.kind=?Rounding?` creates a warning, I wouldn?t have even realized I was affecting the user?s settings, so it seems potentially hazardous that packages could be changing users settings without them being aware of it). So I was wondering if there was a way to more fully isolate the command. Thanks, Elizabeth> On Apr 16, 2019, at 9:36 AM, Bert Gunter <bgunter.4567 at gmail.com> wrote: > > I think I'm missing something. Why does something like this not do what you want: > > > RNGkind() > [1] "Mersenne-Twister" "Inversion" > > f <- function(){ > + cur <- RNGkind(NULL)[1] > + RNGkind("Super-Duper") > + print(RNGkind()) > + RNGkind(cur) > + } > > f() > [1] "Super-Duper" "Inversion" > > RNGkind() > [1] "Mersenne-Twister" "Inversion" > > Cheers, > Bert > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > On Tue, Apr 16, 2019 at 9:13 AM Elizabeth Purdom <epurdom at stat.berkeley.edu <mailto:epurdom at stat.berkeley.edu>> wrote: > 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 > > ______________________________________________ > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code.[[alternative HTML version deleted]]