2017-06-27 2 views
7

Warum istVergleichen Sie einen Wert mit null. Warum ist das wahr?

isTRUE(NULL != 2) 
[1] FALSE 

Und wie würde ich TRUE erhalten?

In meinem realen Fall habe ich Variablen und möchte etwas verarbeiten, wenn sich die Werte unterscheiden. Wenn ein Wert jedoch NULL ist, erkenne ich sie nicht als anders an!

+8

Sie nicht mit NULL vergleichen. Sie benötigen is.null, um zu testen, ob etwas eine Referenz auf das NULL-Objekt ist. – Roland

+0

Um den erwarteten Wert zu erhalten, müssten Sie: 'isTRUE (! Is.null (2))' –

+0

@CarlesMitjans die Variable ist nicht immer NULL, normalerweise hat sie einen anderen ganzzahligen Wert. Es ist nur selten, dass es NULL hat. Es ist unpraktisch, aber ich habe noch einen weiteren is.null() Check hinzugefügt. Ich verstehe das aber nicht. Andere Sprachen kommen hier gut an. – agoldev

Antwort

10

Wie @Roland darauf hingewiesen hat, können wir keine logischen Operationen direkt auf dem Objekt NULL ausführen. Um sie zu vergleichen, müssen wir möglicherweise eine zusätzliche Überprüfung von durchführen und dann den logischen Vergleich durchführen.

Wir können stattdessen identical verwenden, um Werte zu vergleichen, die ganze Zahlen sowie NULL behandelt.

identical(4, 2) 
#FALSE 

identical(NULL, 2) 
#FALSE 

identical(2, 2) 
#TRUE 
0

Um den warum Teil Ihrer Frage zu beantworten:

NULL mit anderen Arten Vergleich werden Ihnen logical(0) (das heißt eine logische Vektor der Länge Null) geben. So

isTRUE(NULL != 2) 

tatsächlich ist

isTRUE(logical(0)) 

die FALSE ist.

Um die Werte zu vergleichen, wo Sie auch NULL Werte haben könnten, könnte man auch so etwas wie dieser (mit Kurzschluss logischer Operator) tun:

a <- 2 
b <- 2 
!is.null(a) && !is.null(b) && a==b 
#[1] TRUE 

a <- 3 
b <- 2 
!is.null(a) && !is.null(b) && a==b 
#[1] FALSE 

a <- 2 
b <- NULL 
!is.null(a) && !is.null(b) && a==b 
#[1] FALSE 
Verwandte Themen