2016-05-04 10 views
2

R Code Beim Schreiben Spalten mit numerischen Daten zu identifizieren, hatte ich ein paar Probleme und fand diese Frage auf SO: Is there a vectorized way to use is.numeric?is.numeric gilt innerhalb vs sapply

Innerhalb dieser Seite ich meine Antwort gefunden, aber ich bin verwirrt durch die Natur des Problems selbst. Auf dieser Seite gibt das folgende Code schnipp, was ich erwarten:

> dat <- data.frame(v1=1:5,v2=letters[1:5],v3=rnorm(5),v4=c(1,2,'c','d',5)) 

> sapply(dat,is.numeric) 

    v1 v2 v3 v4 
TRUE FALSE TRUE FALSE 

Aber wenn ich sapply anwenden ändern, bekomme ich, was mein Problem verursacht hat.

> dat <- data.frame(v1=1:5,v2=letters[1:5],v3=rnorm(5),v4=c(1,2,'c','d',5)) 

> apply(dat,2,is.numeric) 

    v1 v2 v3 v4 
FALSE FALSE FALSE FALSE 

Warum führen Apply und Sapply zu unterschiedlichen Auswertungen?

+5

'help (apply)' - * Wenn 'X' kein Array ist, sondern ein Objekt einer Klasse mit einem Nicht-Null-Wert (z. B. ein Datenrahmen), wenden Sie Versuche an, es über' zu einem Array zu zwingen as.matrix 'wenn es zweidimensional ist (zB ein Datenrahmen) oder über' as.array'. * –

+1

'apply' und' lapply' sind verschiedene Funktionen, es ist also kein Wunder, dass sie unterschiedliche Ergebnisse liefern. Seien Sie sich dessen bewusst, was sie tun und wann sie verwendet werden sollten. – nicola

+0

@RichardScriven - danke für dieses Detail. Ich habe das in der Bewerbung nicht gesehen - klar, ich habe es übersehen oder es im richtigen Kontext nicht gewürdigt. Ich würde aufheben oder akzeptieren, dass du antwortest, wenn ich könnte. – KirkDCO

Antwort

7

apply zwingt alles in den gleichen Typ. Zahlen können Zeichen werden, aber nicht umgekehrt. So wird alles auf character für die Anwendung auf Arbeit gezwungen.

> apply(dat[,1, drop = F], 2, is.numeric) 
    v1 
TRUE 
+2

Die Regeln der Nötigung sind in dieser Antwort aufgeführt, wenn jemand interessiert ist - http://StackOverflow.com/Questions/17030173/Why-does-Hello-0-ReturnTrue/17030209#17030209 - 'Charakter> komplex> numerisch > Ganzzahl> logisch> roh' – thelatemail

1

apply ist nicht für den Datenrahmen ratsam, da es zu einer Matrix zwingen wird. Matrix, wie Sie wahrscheinlich wissen, müssen alle Spalten in einer Matrix den gleichen Modus (numerisch, Zeichen usw.) Haben ... apply konvertiert standardmäßig die Spalten in Zeichen.