2015-03-16 5 views
23

Wenn dplyr verwenden, die tbl_df Funktion druckt eine Anweisung, um den Datenrahmen zu sagen ist „local“:Was bedeutet die Meldung "Lokaler Datenrahmen" von `dplyr ::: print.tbl_df`?

> mtcars %>% 
+  group_by(gear) 
Source: local data frame [32 x 11] 
Groups: gear 

    mpg cyl ... 
1 21.0 6 ... 

ich einen im Speicher gemeint lokalen Datenrahmen gedacht, und ein nicht-lokal war Datenrahmen einer Datenbank wie SQL. Ich glaube, ich liege falsch bei dieser Annahme. In dieser tutorial video bei etwa 25:25, Kevin Markham sagt, dass data.frame Objekte sind nicht lokale Datenrahmen, die ich glaubte, sie waren.

Ich schaute durch die tbl_df Dokumentation und verwendet eine Suchfunktion in der dplyr introduction vignette, kann aber keine Beschreibung eines lokalen Datenrahmens finden.

Frage:Was ist ein lokaler Datenrahmen?

+6

Es unterscheidet es nur von einer entfernten Datenquelle wie einer MySQL-Datenbank oder etwas. – joran

+3

Wenn das verknüpfte Video korrekt ist, sind "data_frame" -Objekte lokale Datenrahmen, aber "data.frame" -Objekte nicht. Jetzt bin ich auch verwirrt. – patabongo

+2

Ich glaube nicht, dass @Tyler in der ursprünglichen Annahme falsch ist, und es gibt einige Semantiken bei der Arbeit. Vielleicht könnte man im Einklang mit der Aussage von Docs und Kevin Markham sagen, dass ein "lokaler Datenrahmen" die Daten sind, die von tbl_df umschlossen werden, das aus einem data.frame erstellt wird, der selbst kein "lokaler Datenrahmen" ist. – jaimedash

Antwort

1

http://www.inside-r.org/packages/cran/dplyr/docs/tbl_df

Ein Datenrahmen tbl wickelt einen lokalen Datenrahmen. Der Hauptvorteil der Verwendung von tbl_df gegenüber einem normalen Datenrahmen ist der Druck: tbl-Objekte drucken nur einige Zeilen und alle Spalten, die auf einen Bildschirm passen, und beschreiben den Rest als Text.

von

http://cran.r-project.org/web/packages/dplyr/dplyr.pdf

Locales Beachten Sie, dass für die lokale Datenrahmen, die Ordnung in C++ Code ausgeführt wird, die keinen Zugriff auf die lokale spezifische Ordnung in der Regel in R. getan Dies bedeutet, dass Strings bestellt wie in der C-locale

8

Ich bin der Autor der video tutorial in der Frage erwähnt. Hier ist eine Zusammenfassung der Funktionen relevant zu dieser Diskussion:

  • data.frame() ist Funktion R für regelmäßigen Datenrahmen zu schaffen.
  • data_frame() ist dplyrs Funktion zum Erstellen von lokalen Datenrahmen.
  • tbl_df() und as_data_frame() sind dplyr Funktionen für eine Umwandlung regelmäßigen Datenrahmen (oder eine Liste) in eine lokalen Datenrahmen.

Also, was ist der Unterschied zwischen regelmäßigen und lokalen Datenrahmen? Sehr wenig. Ein lokaler Datenrahmen ist nur ein regulärer Datenrahmen, der mit der tbl_df Klasse für netteren Druck eingewickelt worden ist. (Die Daten werden nach wie vor in einem regelmäßigen Datenrahmen „unter der Haube“ gespeichert.)

Insbesondere Drucken ein lokalen Datenrahmen zeigt nur die ersten 10 Zeilen, und so viele Spalten wie auf dem Bildschirm passen .(Sie können ein Beispiel für dieses Verhalten oben in der RMarkdown document von meinem first dplyr video tutorial, die dem oben verlinkten Lernprogramm vorausgeht) sehen.

Alle dplyr Funktionen geben einen lokalen Datenrahmen standardmäßig, obwohl Sie es zurück zu einem regelmäßigen Datenrahmen mit der data.frame() Funktion umwandeln kann. Ein Grund dafür ist, wenn Sie bevorzugen, wie regulären Datenrahmen drucken, nämlich, dass Sie mehr Zeilen oder mehr Spalten sehen möchten. Allerdings dplyr ermöglicht es Ihnen, dies zu tun, ohne sie zu konvertieren:

library(dplyr) 
library(nycflights13) 

# print a local data frame (10 rows, variable number of columns) 
flights 

# print 15 rows 
print(flights, n = 15) 

# print all rows (don't run this, since it has 336,776 rows) 
print(flights, n = Inf) 

# print all columns 
print(flights, width = Inf) 

dplyr eine vignette über Datenrahmen hat, die weitere technische Details zur Verfügung stellt.

+0

Ich antwortete ursprünglich, dass 'tbl_df()' und 'as_data_frame()' leicht haben verschiedene Anwendungen. @Hadley erklärte auf [Twitter] (https://twitter.com/justmarkham/status/702504719135186944), dass sie "im Grunde die gleichen" sind, also aktualisierte ich meine Antwort. –

+0

Es gibt einen weiteren Unterschied zwischen normalen 'dat.frame's und' tbl_df's abgesehen von Druckmethoden. Zitat aus der Dokumentation: "[Nie vereinfacht (löscht), so liefert immer data.frame". Das bedeutet, während Daten (mtcars); mtcars [, 1] 'gibt einen atomaren Vektor zurück, tbl_df (mtcars) [, 1]' gibt einen (lokalen) 'dat.frame' mit 1 Spalte zurück. Dieser feine Unterschied kann unerwartetes Verhalten verursachen, wenn es nicht beachtet wird. Ich würde vorschlagen '' ['zu verwenden, um einzelne Spalten zu extrahieren, wenn' tbl_df 's deshalb verwendet wird (der immer einen einzelnen Vektor extrahiert). –