Ich erinnere mich, dass ich irgendwo gelesen habe, dass as.tibble()
ein alias für as_data_frame()
ist, aber ich weiß nicht, was genau ein alias in der Programmierterminologie ist. Ist es einem Wrapper ähnlich?
Ich denke, meine Frage beruht wahrscheinlich auf dem Unterschied in den möglichen Verwendungen zwischen tbl_df()
und as_data_frame()
: Was sind die Unterschiede zwischen ihnen, wenn überhaupt?
Genauer gesagt, wenn ich einen (nicht tibble) Datenrahmen df
benutze, verwende ich ihn oft in ein tibble, indem ich Folgendes verwendet:
df <- tbl_df(df)
Würde nicht
df <- as_data_frame(df)
mach das selbe? Wenn ja, gibt es andere Fälle, in denen die beiden Funktionen tbl_df()
und as_data_frame()
nicht austauschbar verwendet werden können, um dasselbe Ergebnis zu erzielen?
Die R Dokumentation sagt das
tbl_df()
leitet das Argument anas_data_frame()
weiter
bedeutet das, dass tbl_df()
ein Wrapper oder Alias für as_data_frame()
ist? R-Dokumentation scheint nichts über as.tibble()
zu sagen, und ich habe vergessen, wo ich gelesen habe, dass es ein Alias für as_data_frame()
war. anscheinendas_tibble()
ist ein weiterer Alias für as_data_frame()
.
Wenn diese vier Funktionen wirklich alle die gleiche Funktion haben, was ist der Sinn, einer Funktion vier verschiedene Namen zu geben? Ist das nicht verwirrender als hilfreich?
Um Ihre Frage zu beantworten "ob es verwirrend ist", denke ich :).
as.tibble
und as_tibble
sind gleich; beide rufen einfach die S3-Methode as_tibble
auf:
> as.tibble
function (x, ...)
{
UseMethod("as_tibble")
}
<environment: namespace:tibble>
as_data_frame
und tbl_df
stimmen nicht genau überein; tbl_df
ruft as_data_frame
auf:
> tbl_df
function (data)
{
as_data_frame(data)
}
<environment: namespace:dplyr>
Hinweis tbl_df
befindet sich in dplyr
, während as_data_frame
im Paket tibble
enthalten ist:
> as_data_frame
function (x, ...)
{
UseMethod("as_data_frame")
}
<environment: namespace:tibble>
aber natürlich ruft es dieselbe Funktion auf, also sind sie "gleich" oder Aliase wie Sie sagen.
Nun können wir die Unterschiede zwischen den generischen Methoden as_tibble
und as_data_frame
betrachten. Zuerst betrachten wir die Methoden von jedem:
> methods(as_tibble)
[1] as_tibble.data.frame* as_tibble.default* as_tibble.list* as_tibble.matrix* as_tibble.NULL*
[6] as_tibble.poly* as_tibble.table* as_tibble.tbl_df* as_tibble.ts*
see '?methods' for accessing help and source code
> methods(as_data_frame)
[1] as_data_frame.data.frame* as_data_frame.default* as_data_frame.grouped_df* as_data_frame.list*
[5] as_data_frame.matrix* as_data_frame.NULL* as_data_frame.table* as_data_frame.tbl_cube*
[9] as_data_frame.tbl_df*
see '?methods' for accessing help and source code
Wenn Sie den code füras_tibble
auschecken, können Sie auch die Definitionen für viele der as_data_frame
-Methoden sehen. as_tibble
definiert zwei zusätzliche Methoden, die nicht für as_data_frame
, as_tibble.ts
und as_tibble.poly
definiert sind. Ich bin mir nicht wirklich sicher, warum sie nicht auch für as_data_frame
definiert werden konnten.
as_data_frame
verfügt über zwei zusätzliche Methoden, die beide in dplyr
definiert sind: as_data_frame.tbl_cube
und as_data_frame.grouped_df
.
as_data_frame.tbl_cube
benutze die schwächere Überprüfung von as.data.frame
(ja, bleib bei mir) und rufe dann as_data_frame
auf:
> getAnywhere(as_data_frame.tbl_cube)
function (x, ...)
{
as_data_frame(as.data.frame(x, ..., stringsAsFactors = FALSE))
}
<environment: namespace:dplyr>
während as_data_frame.grouped_df
den übergebenen Datenrahmen aufhebt.
Insgesamt scheint es, dass as_data_frame
als zusätzliche Funktionalität über as_tibble
betrachtet werden sollte, es sei denn, es handelt sich um ts
- oder poly
-Objekte.
Nach der Einführung in tibble scheint es so, als ob tibbles tbl_df
ersetzt werden.
Ich freue mich, tibble ankündigen zu können, ein neues Paket zur Bearbeitung und zum Ausdrucken von Datenrahmen in R. Tibbles ist eine moderne Neugestaltung des data.frame, die Beibehaltung der Zeit hat sich als effektiv erwiesen, und das Herausnehmen was nicht möglich ist. Der Name stammt von dplyr: Sie haben diese Objekte ursprünglich mit
tbl_df()
erstellt, das am leichtesten als "tibble diff" ausgesprochen wurde.[...] Dieses Paket extrahiert die mit der tbl_df-Klasse verknüpften Funktionen aus dplyr.
tbl_df
ruft jetzt as_tibble
auf. Dies ist der bevorzugte Alias für as_data_frame
und as.tibble
: ( Kommentar von Hadley Wickham zum Problem , und as_tibble docs )
> tbl_df
function (data)
{
as_tibble(data, .name_repair = "check_unique")
}
Gemäß der Hilfebeschreibung von tbl_df()
ist es veraltet und sollte stattdessen tibble::as_tibble()
verwendet werden. as_data_frame
- und as.tibble
-Hilfeseiten leiten beide zu as_tibble
um.
Beim Aufruf von class
für ein Tibbel wird der Klassenname weiterhin als tbl_df
angezeigt:
> as_tibble(mtcars) %>% class
[1] "tbl_df" "tbl" "data.frame"