Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is set.seed consistent over different versions of R (and Ubuntu)?

I am currently running R version 3.1.0 (on Ubuntu 12.04 LTS) and as both my R version and my operating system is getting rather old, I plan on updating both. However, I have a lot of simulations that rely on set.seed() and I would like them to still give me the same random numbers after updating both R and my operating system.

So my question is three-fold.

  1. Can I update R without changing which numbers are generated from each seed?
  2. Can I do the same for my operating system?
  3. If no to either 1) or 2), is there a way to change the seeds in my code in such a way that they are consistent with the olds seeds?
like image 853
Phil Avatar asked Nov 09 '17 10:11

Phil


People also ask

What does set seed do in R?

Data Visualization using R Programming The use of set. seed is to make sure that we get the same results for randomization. If we randomly select some observations for any task in R or in any statistical software it results in different values all the time and this happens because of randomization.

Do you only need to set seed once in R?

So the short answer to the question is: if you want to set a seed to create a reproducible process then do what you have done and set the seed once; however, you should not set the seed before every random draw because that will start the pseudo-random process again from the beginning.

Can you set seed for sample in R?

In R, we can set a random seed to make the output of our R code reproducible. By setting a specific seed, the random processes in our script always start at the same point and hence lead to the same result.

What package is set seed in R?

Description. set. seed in the simEd package allows the user to simultaneously set the initial seed for both the stats and simEd variate generators.


2 Answers

Cross-OS consistency: yes

If you installed R on two different operating systems without manually changing defaults or the RProfile, you should get the same results when using set.seed().

Consistency over versions of R: not necessarily

It used to be the case that set.seed() would give the same results across R versions, but that's no longer generally true thanks to a little-announced update in R 3.6.0. So you can get cross version consistency comparing results before R 3.6.0, but if you compare a post-3.6.0 use of set.seed() to a pre-3.6.0 use of set.seed(), you will get different results.

You can see that in the examples below:

R 3.2.0

> set.seed(1999) > sample(LETTERS, 3) [1] "T" "N" "L" 

R 3.5.3

> set.seed(1999) > sample(LETTERS, 3) [1] "T" "N" "L" 

R 3.6.0

set.seed(1999) sample(LETTERS, 3) [1] "D" "Z" "R" 

The reason for the inconsistency is that in R 3.6.0, the default kind of under-the-hood random-number generator was changed. Now, in order to get the results from set.seed() to match, you have to first call the function RNGkind(sample.kind = "Rounding").

R 3.6.0

> RNGkind(sample.kind = "Rounding") Warning message: In RNGkind(sample.kind = "Rounding") : non-uniform 'Rounding' sampler used > set.seed(1999) > sample(Letters, 3) [1] "T" "N" "L" 
like image 158
bschneidr Avatar answered Sep 20 '22 18:09

bschneidr


Having tested on several R versions (3.1.0, 3.3.1, 3.4.2) and two different machines (Windows 7 x64, Windows 10 x64), I got the same runif() random numbers with the same set.seed() independently of the R versions and the operating system. As far as I know, this suggests a yes for both questions 1 and 2.

like image 28
cdermont Avatar answered Sep 21 '22 18:09

cdermont