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<http://127.0.0.1:14277/help/library/base/help/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

Data-analyst

+31 6 43 83 89 33
emil.b...@dans.knaw.nl<mailto:emil.b...@dans.knaw.nl>

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

        [[alternative HTML version deleted]]

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

Reply via email to