Reputation: 776
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?
Upvotes: 12
Views: 1395
Reputation: 18759
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
Upvotes: 15