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]]