Lukas Stadler
2017-Oct-23 13:56 UTC
[Rd] range function with finite=T and logical parameters
Hi! I was wondering about the behavior of the range function wrt. logical NAs:> range(c(0L, 1L, NA), finite=T)[1] 0 1> range(c(F, T, NA), finite=T)[1] NA NA The documentation is quite clear that "finite = TRUE includes na.rm = TRUE?, so that I would have assumed that these two snippets would produce the same result. - Lukas
Martin Maechler
2017-Oct-23 16:36 UTC
[Rd] range function with finite=T and logical parameters
>>>>> Lukas Stadler <lukas.stadler at oracle.com> >>>>> on Mon, 23 Oct 2017 15:56:55 +0200 writes:> Hi! > I was wondering about the behavior of the range function wrt. logical NAs: >> range(c(0L, 1L, NA), finite=T) > [1] 0 1 >> range(c(F, T, NA), finite=T) > [1] NA NA > The documentation is quite clear that "finite = TRUE includes na.rm = TRUE?, so that I would have assumed that these two snippets would produce the same result. > - Lukas I agree. Further, another informal "rule" would require that the two calls range(L, *) range(as.numeric(L), *) are equivalent for logical vectors L without attributes. I'll look into fixing this by an obvious change to (R-level) range.default(). ------ Note for the more advanced ones -- i.e. typical R-devel readers : T and F are variables in R. For that reason, using the language keywords TRUE and FALSE is much preferred in such cases. For some tests we'd even use T <- FALSE or even delayedAssign("F", stop("do not use 'F' when programming with R")) before running the tests -- just do ensure that the code to be tested does not use these short forms. Thank you, Lukas, for the report! Best, Martin
Tomas Kalibera
2017-Nov-07 14:55 UTC
[Rd] range function with finite=T and logical parameters
FYI this has been fixed in R-devel by Martin Tomas On 10/23/2017 06:36 PM, Martin Maechler wrote:>>>>>> Lukas Stadler <lukas.stadler at oracle.com> >>>>>> on Mon, 23 Oct 2017 15:56:55 +0200 writes: > > Hi! > > I was wondering about the behavior of the range function wrt. logical NAs: > > >> range(c(0L, 1L, NA), finite=T) > > [1] 0 1 > >> range(c(F, T, NA), finite=T) > > [1] NA NA > > > The documentation is quite clear that "finite = TRUE includes na.rm = TRUE?, so that I would have assumed that these two snippets would produce the same result. > > > - Lukas > > > I agree. Further, another informal "rule" would require that the two calls > > range(L, *) > range(as.numeric(L), *) > > are equivalent for logical vectors L without attributes. > I'll look into fixing this by an obvious change to (R-level) > range.default(). > > ------ > > Note for the more advanced ones -- i.e. typical R-devel readers : > > T and F are variables in R. For that reason, using the language > keywords TRUE and FALSE is much preferred in such cases. For > some tests we'd even use > > T <- FALSE > > or even > > delayedAssign("F", stop("do not use 'F' when programming with R")) > > before running the tests -- just do ensure that the code to be > tested does not use these short forms. > > > Thank you, Lukas, for the report! > > Best, > Martin > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel