On 01/01/2022 2:24 p.m., Colin Gillespie wrote:
Hi,

The documentation for floor, ceiling and trunc is slightly ambiguous.

"floor takes ... and returns a numeric vector containing the largest
integers ..."

My initial thought was that floor() would return a vector of integers.

That would be described as "an integer vector". I think the docs are pretty consistent about this: if an output is described as "a numeric vector", that's the type you get. ("numeric" and "double" refer to the same type in R. This naming inconsistency is discussed in the ?double help page.)

Instead, it returns a vector of doubles, i.e c(1L, 2L) vs c(1, 2)

  * Could the docs be changed
  * Would it be worth returning integers instead?

The range of inputs is much larger than the range of 32 bit integers, so this would just make things more complicated, and would mean that code that cares about the difference between numeric and integer would need extra tests.

For example 3e9 + 0.1 is not an integer, and if you take the floor you get 3e9. That number can't be represented in the integer type, but can be exactly represented as a mathematical integer in the numeric/double type.

Duncan Murdoch

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to