Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Order of operator precedence when using ":" (the colon)

Tags:

r

r-faq

I am trying 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?

like image 267
Marc Avatar asked Jun 07 '14 08:06

Marc


1 Answers

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

like image 78
plannapus Avatar answered Oct 11 '22 22:10

plannapus