Marc - 7 months ago 37

R Question

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]`

`x[1+1:3]`

`NA`

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

Source (Stackoverflow)