2013-07-15 9 views
14

Perché la prima riga restituisce TRUE e la terza riga restituisce 1? Mi aspetto che entrambe le righe ritornino 1. Qual è il significato esatto di quelle due parentesi in più nella terza riga?Comportamento dei risultati summing! Is.na()

!is.na(5) + !is.na(NA) 
# TRUE 
(!is.na(5)) + (!is.na(NA)) 
# 1 

modifica: dovrebbe verificare più volte. Il problema originale era con !is.na(), si pensava replicato per is.na(). Ma non :)

+2

anche 1 per entrambi – user20650

+0

... Non ho verificato ... I il problema originale era con! Is.na(). Provalo subito :) – Xachriel

+2

Questo vale anche per '! TRUE +! FALSE' e' (! TRUE) + (! FALSE) '. Cioè, non ha niente a che fare con 'is.na' – TooTone

risposta

21

! has a weird, counter-intuitive precedence in R.

vostro primo codice è equivalente al

!(is.na(5) + !is.na(NA)) 

Cioè, ! ha la precedenza inferiore rispetto +.

+2

+1 - Il che significa che è possibile ottenere risultati bizzarri come: '! TRUE + FALSE equivale a FALSE' e' FALSE +! TRUE è uguale a 0' Ciò mi ferisce il cervello. – thelatemail

+4

Per Lispers: 'codetools :: showTree (quota (! Is.na (5) +! Is.na (NA)))' – kohske

+6

Va bene per mostrare: indipendentemente dalla lingua in questione, utilizzare alcuni set di parentesi aggiuntivi per evitare ambiguità. –