Warum ist 'sapply' viel langsamer beim Verarbeiten von Zeilen als Spalten in einem Datenrahmen in R?

8

Betrachten Sie das folgende Skript, das wir Foo.r nennen werden.

%Vor%

Wenn die erste dummy -Zeile auskommentiert ist, werden Spalten addiert, und der Code dauert weniger als eine Sekunde, um auf meinem Rechner zu laufen.

%Vor%

Wenn die zweite dummy -Zeile auskommentiert ist (und die erste in kommentiert ist), addieren wir Zeilen, und die Laufzeit liegt näher bei 30 Sekunden.

%Vor%

Beachten Sie, dass mir die Standard-Summierfunktionen rowSums und colSums bekannt sind, aber ich verwende die Summe nur als Beispiel für dieses seltsame asymmetrische Leistungsverhalten.

    
merlin2011 02.12.2013, 01:05
quelle

1 Antwort

6

Dies ist nicht wirklich das Ergebnis von sapply , es hat vielmehr damit zu tun, wie Datenframes gespeichert werden und welche Implikationen das Extrahieren von Zeilen im Vergleich zu Spalten hat. Datenrahmen werden als Listen gespeichert, wobei jedes Element der Liste eine Spalte ist.

Dies bedeutet, dass das Extrahieren von Spalten einfacher ist als das Extrahieren von Zeilen.

Um zu zeigen, dass dies nichts mit sapply zu tun hat, betrachten Sie dies mit Ihrem Datenrahmen x :

%Vor%

Wenn Sie die Dinge zeilenweise und schnell erledigen müssen, sind Datenrahmen oft eine schlechte Wahl. Um in Zeilen arbeiten zu können, muss es entsprechende Elemente aus jedem Listenelement extrahieren. Um Spalten zu bearbeiten, muss es nur durch die Spalten laufen.

    
joran 02.12.2013 01:34
quelle

Tags und Links