2016-05-19 5 views
-2

Ich versuche, einige Spalten in data.frame von Integer zu numerisch zu konvertieren. Und dieses Stück Code funktioniert gut.Warum habe ich verschiedene Antworten, wenn ich versuche, den Code mit ifelse anstelle von if zu ändern ... sonst ... in R

Aber wenn ich ifelse anstelle von wenn ... sonst .... Das Ergebnis ist Unsinn.

test.data[] <- lapply(test.data, function(x) ifelse(is.integer(x), as.numeric(x), x)) 

Warum und was ist der genaue Unterschied zwischen if ... else und ifelse hier? Danke vielmals.

+2

Die Hilfedateien werden Sie den Unterschied erkennen. –

+0

Der Titel dieser Frage ist anders, aber die Erklärungen sind genau das, wonach Sie suchen http://stackoverflow.com/questions/9449184/if-else-vs-ifelse-with-lists/9460026#9460026 –

Antwort

0

ifelse gibt ein Ergebnis zurück, das in allen Fällen die gleiche Länge wie das erste Argument hat. Daher wird in Ihrem Beispiel das erste Element x zurückgegeben. if-else gibt einen von zwei Werten basierend auf dem einzelnen logischen Wert zurück (entweder ein Vektor der Länge eins oder das erste Element eines längeren Vektors mit einer Warnung).

> x <- c(1L, 2L, 3L) 
> ifelse(is.integer(x), as.numeric(x), x) 
[1] 1 
> y <- c(1,2,3) 
> ifelse(is.integer(y), as.numeric(y), y) 
[1] 1 

> if (TRUE) {1:10} else {11:20} 
[1] 1 2 3 4 5 6 7 8 9 10 
> if (FALSE) {1:10} else {11:20} 
[1] 11 12 13 14 15 16 17 18 19 20 

In Ihrem Fall, wenn-sonst ist die korrekte Bedienung, wie is.integer Arbeiten auf einem Vektor und gibt eine logische Länge 1.

Verwandte Themen