2014-06-07 21 views
8

Sto cercando di estrarre i valori da un vettore utilizzando vettori numerici espressi in due modi apparentemente equivalenti:Ordine di precedenza degli operatori quando si usa ":" (due punti)

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

Sono confuso perché l'espressione x[2:3] produce un risultato diverso da x[1+1:3] - il secondo include un valore NA alla fine. Cosa mi manca?

+0

1 + 1 = 2 (il secondo elemento), 1 + 2 = 3 (il terzo elemento) e 1 + 3 = 4 (il quarto elemento) e il tuo vettore ha una lunghezza di soli tre elementi. Non c'è un quarto elemento in modo da ottenere NA. Prova (1 + 1): 3. –

risposta

10

Perché l'operatore : ha la precedenza su + così 1+1:3 è davvero 1+(1:3) (i. E. 2:4) e non 2:3. Pertanto, per modificare l'ordine di esecuzione come definito prima dell'operatore, utilizzare parentesi ()

È possibile visualizzare l'ordine di precedenza degli operatori nel file di guida ?Syntax. Ecco la parte rilevante:

Sono definiti i seguenti operatori unari e binari. Sono elencati in gruppi di precedenza, dal più alto al più basso.
::::: variabili di accesso in uno spazio
$@ componente/asola di estrazione
[[[ indicizzazione
^ elevamento (da destra a sinistra)
-+ unario meno e più
: operatore sequenza
%any% operatori speciali (incluso %% e %/%)
*/ moltiplicare, dividere
+- (binario) aggiungere, sottrarre