Marc Marc - 21 days ago 8
R Question

Seemingly similar vector extraction using numeric indices produce different results

I try to extract values from a vector using numeric vectors expressed in two seemingly equivalent ways:

x <- c(1,2,3)
x[2:3]
# [1] 2 3
x[1+1:3]
# [1] 2 3 NA


I am confused why the expression
x[2:3]
produces a result different from
x[1+1:3]
-- the second includes an
NA
value at the end. What am I missing?

Answer

Because the operator : has precedence over + so 1+1:3 is really 1+(1:3) (i. e. 2:4) and not 2:3. Thus, to change the order of execution as defined operator precedence, use parentheses ()

You can see the order of precedence of operators in the help file ?Syntax. Here is the relevant part:

The following unary and binary operators are defined. They are listed in precedence groups, from highest to lowest.
:: ::: access variables in a namespace
$ @ component / slot extraction
[ [[ indexing
^ exponentiation (right to left)
- + unary minus and plus
: sequence operator
%any% special operators (including %% and %/%)
* / multiply, divide
+ - (binary) add, subtract