Thanks, and good to know the with_seed function.

best,
Chen

On 29.11.21 22:43, Henrik Bengtsson wrote:
The easiest is to use withr::with_seed(), e.g.

withr::with_seed(seed = 42L, randomcoloR::distinctColorPalette(6))
[1] "#A0E1BC" "#B8E363" "#D686BE" "#DEA97F" "#B15CD8" "#A2B9D5"
withr::with_seed(seed = 42L, randomcoloR::distinctColorPalette(6))
[1] "#A0E1BC" "#B8E363" "#D686BE" "#DEA97F" "#B15CD8" "#A2B9D5"

It works by undoing globalenv()$.Random.seed after the random number
generator has updated.  If you want to roll your own version of this,
you need to make sure to handle the special case when there is no
pre-existing .Random.seed in globalenv().

Regarding packages and functions changing the random seed via a
set.seed() [without undoing it]: this should *never* be done, because
it will wreak havoc on a analyses and studies that rely on random
numbers.  My rule of thumb: only the end-user should be allowed to use
set.seed(), which should typically be done at the top of their R
scripts.

/Henrik

On Mon, Nov 29, 2021 at 1:23 PM Meng Chen <mengche...@gmail.com> wrote:
Thanks. I think it may work in theory, generating "enough" distinct colors
is fairly easy. Then the problem will be how to find a subset of colors of
size n, and the selected colors are still most distinguishable. I think I
will do this with my eyes if no other methods, a tedious job.
But at least for my curiosity, I still want to know if there are other ways
to achieve this. I feel like 80% of people who use the distinctColorPallete
function actually don't need the "random" feature :) Thanks.

On Mon, Nov 29, 2021 at 9:39 PM James W. MacDonald <jmac...@uw.edu> wrote:

It appears that you don't actually want random colors, but instead you
want the same colors each time. Why not just generate the vector of 'random
distinct colors' one time and save the vector of colors?

-----Original Message-----
From: Bioc-devel <bioc-devel-boun...@r-project.org> On Behalf Of Meng Chen
Sent: Monday, November 29, 2021 3:21 PM
To: bioc-devel@r-project.org
Subject: [Bioc-devel] Use set.seed inside function

Dear BioC team and developers,

I am using BiocCheck to check my package, it returns a warning:
" Remove set.seed usage in R code"

I am using "set.seed" inside my functions, before calling function
distinctColorPalette (randomcoloR package) in order to generate
reproducible "random distinct colors". So what would be the best practice
to solve this warning? I think 1. use set.seed and don't change anything.
2. use the set.seed function, but include something like below inside the
function *gl.seed <- .Random.seed* *on.exit(assign(".Random.seed", gl.seed,
envir = .GlobalEnv))* 3. use some other functions for the purpose

Any suggestions will be appreciated. Thanks.
--
Best Regards,
Chen

         [[alternative HTML version deleted]]

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


--
Best Regards,
Chen

         [[alternative HTML version deleted]]

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to