[R] an issue about subsetting a vector

Paulo Barata
Sun, 24 Mar 2024 18:19:59 -0000

To the R-Help list,

I would like to have a clarification about an issue that I observe when
subsetting a vector. This is R version 4.3.3 on Windows 10.

-- Example with a vector:

 > a <- 1:5
 > a
[1] 1 2 3 4 5

So we have, with a negative index:
 > a[-3]
[1] 1 2 4 5

But when the index is integer(0), we have this:

 > a[integer(0)]
integer(0)
 > a[-integer(0)]
integer(0)

When it comes to the function integer(), the R Help file says:

"Value: integer creates a integer vector of the specified length. Each
element of the vector is equal to 0."

But we see below that integer(0) is some kind of null vector, that is,
no numbers are represented by integer(0):

 > class(integer(0))
[1] "integer"
 > length(integer(0))
[1] 0

So my question: in the expression a[-integer(0)], what happens exactly
with the index -integer(0)? We see that integer(0), although of class
integer, does not represent any numbers, as its length is zero, so it
seems to me that it makes no sense to calculate its negative
-integer(0). What exactly is -integer(0)?

In particular, why a[-integer(0)] is not the whole vector a, that is,
[1] 1 2 3 4 5? In the example below, if the invalid index -99 is
presented to a, the result is the whole vector:

 > a[-99]
[1] 1 2 3 4 5

If -integer(0) is an invalid index, why do we have this?

 > a[-integer(0)]
integer(0)

Why a[-integer(0)] is not the whole vector a?

Thank you very much.

Paulo Barata

Rio de Janeiro, Brazil