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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With