GILLIBERT, Andre
2021-Sep-17 10:55 UTC
[Rd] WISH: set.seed(seed) to produce error if length(seed) != 1 (now silent)
Hello, A vector with a length >= 2 to set.seed would probably be a bug. An error message will help the user to fix his R code. The bug may be accidental or due to bad understanding of the set.seed function. For instance, a user may think that the whole state of the PRNG can be passed to set.seed. The "if" instruction, emits a warning when the condition has length >= 2, because it is often a bug. I would expect a warning or error with set.seed(). Validating inputs and emitting errors early is a good practice. Just my 2 cents. Sincerely. Andre GILLIBERT -----Message d'origine----- De?: R-devel [mailto:r-devel-bounces at r-project.org] De la part de Avraham Adler Envoy??: vendredi 17 septembre 2021 12:07 ??: Henrik Bengtsson Cc?: R-devel Objet?: Re: [Rd] WISH: set.seed(seed) to produce error if length(seed) != 1 (now silent) Hi, Henrik. I?m curious, other than proper programming practice, why? Avi On Fri, Sep 17, 2021 at 11:48 AM Henrik Bengtsson < henrik.bengtsson at gmail.com> wrote:> Hi, > > according to help("set.seed"), argument 'seed' to set.seed() should be: > > a single value, interpreted as an integer, or NULL (see ?Details?). > > From code inspection (src/main/RNG.c) and testing, it turns out that > if you pass a 'seed' with length greater than one, it silently uses > seed[1], e.g. > > > set.seed(1); sum(.Random.seed) > [1] 4070365163 > > set.seed(1:3); sum(.Random.seed) > [1] 4070365163 > > set.seed(1:100); sum(.Random.seed) > [1] 4070365163 > > I'd like to suggest that set.seed() produces an error if length(seed) > > 1. As a reference, for length(seed) == 0, we get: > > > set.seed(integer(0)) > Error in set.seed(integer(0)) : supplied seed is not a valid integer > > /Henrik > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Sent from Gmail Mobile [[alternative HTML version deleted]] ______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Henrik Bengtsson
2021-Sep-17 12:38 UTC
[Rd] WISH: set.seed(seed) to produce error if length(seed) != 1 (now silent)
> I?m curious, other than proper programming practice, why?Life's too short for troubleshooting silent mistakes - mine or others. While at it, searching the interwebs for use of set.seed(), gives mistakes/misunderstandings like using set.seed(<double>), e.g.> set.seed(6.1); sum(.Random.seed)[1] 73930104> set.seed(6.2); sum(.Random.seed)[1] 73930104 which clearly is not what the user expected. There are also a few cases of set.seed(<character>), e.g.> set.seed("42"); sum(.Random.seed)[1] -2119381568> set.seed(42); sum(.Random.seed)[1] -2119381568 which works just because as.numeric("42") is used. /Henrik On Fri, Sep 17, 2021 at 12:55 PM GILLIBERT, Andre <Andre.Gillibert at chu-rouen.fr> wrote:> > Hello, > > A vector with a length >= 2 to set.seed would probably be a bug. An error message will help the user to fix his R code. The bug may be accidental or due to bad understanding of the set.seed function. For instance, a user may think that the whole state of the PRNG can be passed to set.seed. > > The "if" instruction, emits a warning when the condition has length >= 2, because it is often a bug. I would expect a warning or error with set.seed(). > > Validating inputs and emitting errors early is a good practice. > > Just my 2 cents. > > Sincerely. > Andre GILLIBERT > > -----Message d'origine----- > De : R-devel [mailto:r-devel-bounces at r-project.org] De la part de Avraham Adler > Envoy? : vendredi 17 septembre 2021 12:07 > ? : Henrik Bengtsson > Cc : R-devel > Objet : Re: [Rd] WISH: set.seed(seed) to produce error if length(seed) != 1 (now silent) > > Hi, Henrik. > > I?m curious, other than proper programming practice, why? > > Avi > > On Fri, Sep 17, 2021 at 11:48 AM Henrik Bengtsson < > henrik.bengtsson at gmail.com> wrote: > > > Hi, > > > > according to help("set.seed"), argument 'seed' to set.seed() should be: > > > > a single value, interpreted as an integer, or NULL (see ?Details?). > > > > From code inspection (src/main/RNG.c) and testing, it turns out that > > if you pass a 'seed' with length greater than one, it silently uses > > seed[1], e.g. > > > > > set.seed(1); sum(.Random.seed) > > [1] 4070365163 > > > set.seed(1:3); sum(.Random.seed) > > [1] 4070365163 > > > set.seed(1:100); sum(.Random.seed) > > [1] 4070365163 > > > > I'd like to suggest that set.seed() produces an error if length(seed) > > > 1. As a reference, for length(seed) == 0, we get: > > > > > set.seed(integer(0)) > > Error in set.seed(integer(0)) : supplied seed is not a valid integer > > > > /Henrik > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > -- > Sent from Gmail Mobile > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >