Inconsistencies when extracting with non-integer numeric indices near zero

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Inconsistencies when extracting with non-integer numeric indices near zero

Dear R-devel,

When I was playing around with different kind of indices when subsetting I noticed some unexpected behaviours when using non-integer numeric indices, especially near zero.
From the docs: “Numeric values are coerced to integer as by as.integer<> (and hence truncated towards zero).”
But some behaviour differs from that, and the behaviour also differs between [ and [[ :
c(1,2)[as.integer(.5)]               --> numeric(0) # As expected
c(1,2)[.5]                                 --> numeric(0) # As expected
c(1,2)[[as.integer(.5)]]            --> Error in c(1, 2)[[as.integer(0.5)]] : attempt to select less than one element in integerOneIndex # Also as expected
c(1,2)[[.5]]                               --> [1] 1            # Not so expected
c(1,2)[[1.5]]                             --> [1] 1            # As expected, but this also means somevector[[n]] and somevector[[n+1]] give back the same element for 0<n<1
c(1,2)[[as.integer(-1.5)]]         --> [1] 2            # As would be expected, though negative subscript for [[ is of course sketchy
c(1,2)[[-1.5]]                            --> [1] 1            # But coerced to -2 is the last thing I’d expect
c(1,2)[as.integer(-.5)]             --> numeric(0) # As expected
c(1,2)[-.5]                                --> [1] 2            # Coerced to -1?, this also means that length(union(c(1,2)[-n], c(1,2)[n])) != 2 for -1<n<1
c(1,2)[-1.5]                              --> [1] 2            # Again as expected, but same problem as before: indexing with n and n+1 can give same element back.

I suspect most of this behaviour is due to the case of special treatment of zero, where first 0-indices are dropped, and only then the casting to integer is done, and when that returns zero some unforeseen behaviour occurs.
Along with using negative indices when extracting with [[, which in any case only succeeds with length-2 vectors (We need a length-one index resulting in the return of a single element). For the last case I’d think we’d do best in throwing an error whenever negative indices are used with [[, but for other cases I think we need to change the underlying code, or at the very least update documentation.
Any thoughts?

Best regards,
Emil Bode


+31 6 43 83 89 33
[hidden email]<mailto:[hidden email]>

DANS: Netherlands Institute for Permanent Access to Digital Research Resources
Anna van Saksenlaan 51 | 2593 HW Den Haag | +31 70 349 44 50 | [hidden email]<mailto:[hidden email]> |<applewebdata://71F677F0-6872-45F3-A6C4-4972BF87185B/>
DANS is an institute of the Dutch Academy KNAW<> and funding organisation NWO<>.

        [[alternative HTML version deleted]]

[hidden email] mailing list