2013-06-22 21 views
5

Warum können wir ifelse() aber nicht else if(){} in with() oder within() Anweisung verwenden?sonst if() {} VS ifelse()

Ich hörte das erste ist vektorisierbar und nicht das letztere. Was heißt das ?

Antwort

11

Das if Konstrukt berücksichtigt nur die erste Komponente als ein Vektor an sie übergeben wird, (und gibt eine Warnung)

if(sample(100,10)>50) 
    print("first component greater 50") 
else 
    print("first component less/equal 50") 

Die ifelse Funktion die Prüfung an jeder Komponente durchführt und liefert einen Vektor

ifelse(sample(100,10)>50, "greater 50", "less/equal 50") 

Die ifelse Funktion ist zum Beispiel nützlich für transform. Es ist oft nützlich, & oder | in ifelse Bedingungen und && oder || in if zu verwenden.

9

Antwort für Ihren zweiten Teil:

* if Verwendung, wenn x Länge von 1 hat, aber dass von y größer als 1 *

x <- 4 
y <- c(8, 10, 12, 3, 17) 
if (x < y) x else y 

[1] 8 10 12 3 17 
Warning message: 
In if (x < y) x else y : 
    the condition has length > 1 and only the first element will be used 

ifelse verwenden, wenn x hat Länge von 1, aber die von y ist größer als 1

ifelse (x < y,x,y) 
[1] 4 4 4 3 4 
+0

das ist super interessant. Ich könnte es tatsächlich als einen Nachteil betrachten, lieber eine Warnung erhalten, wenn ich versuche, ein int und eine Liste zu vergleichen –