2013-07-15 12 views
14

Warum gibt die erste Zeile TRUE zurück, und die dritte Zeile gibt 1 zurück? Ich würde erwarten, dass beide Zeilen zurückkehren. 1. Was bedeuten diese zusätzlichen zwei Klammern in der dritten Zeile genau?Verhalten der Summierung! Is.na() Ergebnisse

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

bearbeiten: sollte diese mehrmals überprüfen. Das ursprüngliche Problem war mit !is.na(), dachte es repliziert für is.na(). Aber es hat :) nicht

+2

erhalten Sie auch 1 für beide – user20650

+0

... Sicher nicht ... Ich war das ursprüngliche Problem mit! Is.na(). Versuchen Sie es jetzt :) – Xachriel

+2

Dies gilt auch für '! TRUE +! FALSE' und' (! TRUE) + (! FALSE) '. Dh, es hat nichts mit 'is.na' zu tun. – TooTone

Antwort

21

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

Ihr erster Code

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

Das heißt, ! hat eine geringere Priorität als +.

+2

+1 - Was bedeutet, dass Sie bizarre Ergebnisse bekommen können: '! TRUE + FALSE ist gleich FALSE' und' FALSE +! TRUE ist gleich 0' Das tut meinem Gehirn weh. – thelatemail

+4

Für Lispers: 'codeTools :: showTree (zitat (! Is.na (5) +! Is.na (NA)))' – kohske

+6

Geht einfach zu zeigen: unabhängig von der Sprache, verwenden Sie ein paar zusätzliche Sätze von Klammern Mehrdeutigkeiten vermeiden. –

Verwandte Themen