>>>>> Benjamin Tyner >>>>> on Thu, 23 Jan 2020 08:16:03 -0500 writes:
> On 1/20/20 12:33 PM, Martin Maechler wrote: >> >> It's really something that should be discussed (possibly not >> here, .. but then I've started it here ...). >> >> The NEWS for R 3.0.0 contain (in NEW FEATURES) : >> >> * Functions rbinom(), rgeom(), rhyper(), rpois(), rnbinom(), >> rsignrank() and rwilcox() now return integer (not double) >> vectors. This halves the storage requirements for large >> simulations. >> >> and what I've been suggesting is to revert this change >> (svn rev r60225-6) which was purposefully and diligently done by >> a fellow R core member, so indeed must be debatable. >> >> Martin > For the record, I don't personally objects to the change here (as my > philosophy tends toward treating most warnings as errors anyway) but for > the sake of other useRs who may get bitten, perhaps we should be more > explicit that backwards-compatibility won't be preserved under certain > use patterns, for example: > # works (with warning) in R 3.6.2 but fails (with error) in R-devel: > vapply(list(1e9, 1e10), > function(lambda) { > rpois(1L, lambda) > }, > FUN.VALUE = integer(1L) > ) Well, some people are too picky... use numeric(), not integer() in such cases : > vapply(1:10, function(i) if(runif(1) < 0.5) 1L else 2, FUN.VALUE=pi) [1] 1 1 2 2 2 2 1 1 2 1 > No, really, I don't plan to spend time "bloating" the documentation any further, when noticing that only a "few parts in a billion" people carefully read our help pages where the remaining 99.999% percent rather try things in the R console and draw (often) wrong conclusions... I *am* glad and grateful for careful and accurate R users and bug-squashing helpers such as you or Suharto or ... Martin > # in R-devel, a little extra work to achieve a warning as before: > vapply(list(1e9, 1e10), > function(lambda) { > tmp <- rpois(1L, lambda) > if (!is.integer(tmp)) { > warning("NAs produced") > tmp <- NA_integer_ > } > tmp > }, > FUN.VALUE = integer(1L) > ) > (and yes I realize that rpois() vectorizes on lambda, so vapply is > re-inventing the wheel in this toy example, but there could be (?) a > justified use for it in more complicated simulations). ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel