2013-07-15 5 views
14

Pourquoi la première ligne renvoie TRUE et la troisième ligne renvoie 1? Je m'attendrais à ce que les deux lignes retournent 1. Quelle est la signification exacte de ces deux parenthèses supplémentaires dans la troisième ligne?Comportement des résultats de sommation! Is.na()

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

Modifier: devrait vérifier ces plusieurs fois. Le problème d'origine était avec !is.na(), pensé qu'il a été répliqué pour is.na(). Mais il n'a pas :)

+2

également obtenir 1 pour les deux – user20650

+0

... Je ne me suis pas assuré ... Je le problème d'origine était avec! Is.na(). Essayez-le maintenant :) – Xachriel

+2

Cela vaut également pour '! TRUE +! FALSE' et' (! TRUE) + (! FALSE) '. C'est à dire, ça n'a rien à voir avec 'is.na' – TooTone

Répondre

21

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

Votre premier code est équivalent à

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

C'est, ! a priorité inférieure à +.

+2

+1 - Ce qui signifie que vous pouvez obtenir des résultats bizarres comme: '! TRUE + FALSE est égal à FALSE' et' FALSE +! TRUE est égal à 0' Cela me fait mal au cerveau. – thelatemail

+4

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

+6

Juste va montrer: indépendamment de la langue en question, utilisez quelques ensembles supplémentaires de parenthèses pour éviter les ambiguïtés. –