Je me souviens d'avoir lu quelque part que as.tibble()
est un alias pour as_data_frame()
, mais je ne sais pas ce qu'est exactement un alias dans la terminologie de programmation. Est-ce similaire à un emballage?
Donc, je suppose que ma question concerne probablement la différence d’usages possibles entre tbl_df()
et as_data_frame()
: quelles sont les différences entre elles, le cas échéant?
Plus précisément, étant donné un cadre de données (non-tibble) df
, je le transforme souvent en tibble en utilisant:
df <- tbl_df(df)
Ne serait pas
df <- as_data_frame(df)
faire la même chose? Si tel est le cas, existe-t-il d'autres cas où les deux fonctions tbl_df()
et as_data_frame()
ne peuvent pas être utilisées de manière interchangeable pour obtenir le même résultat?
La documentation R dit que
tbl_df()
transmet l'argument àas_data_frame()
cela signifie-t-il que tbl_df()
est un wrapper ou un alias pour as_data_frame()
? R documentation ne semble rien dire à propos de as.tibble()
et j'ai oublié où j'ai lu que c'était un alias pour as_data_frame()
. De plus, apparemmentas_tibble()
est un autre alias de as_data_frame()
.
Si ces quatre fonctions sont vraiment toutes identiques, quel est le sens de donner à une fonction quatre noms différents? N'est-ce pas plus déroutant qu'utile?
Pour répondre à votre question de "si c'est déroutant", je pense que oui :).
as.tibble
et as_tibble
sont identiques; les deux appellent simplement la méthode S3 as_tibble
:
> as.tibble
function (x, ...)
{
UseMethod("as_tibble")
}
<environment: namespace:tibble>
as_data_frame
et tbl_df
ne sont pas exactement les mêmes; tbl_df
appelle as_data_frame
:
> tbl_df
function (data)
{
as_data_frame(data)
}
<environment: namespace:dplyr>
Remarque: tbl_df
est dans dplyr
alors que as_data_frame
est dans le package tibble
:
> as_data_frame
function (x, ...)
{
UseMethod("as_data_frame")
}
<environment: namespace:tibble>
mais bien sûr, cela appelle la même fonction, donc ce sont "les mêmes", ou alias comme vous le dites.
Nous pouvons maintenant examiner les différences entre les méthodes génériques as_tibble
et as_data_frame
. Premièrement, nous examinons les méthodes de chacun:
> 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
Si vous extrayez le code pouras_tibble
, vous pouvez également voir les définitions de la plupart des méthodes as_data_frame
. as_tibble
définit deux méthodes supplémentaires qui ne sont pas définies pour as_data_frame
, as_tibble.ts
et as_tibble.poly
. Je ne sais pas vraiment pourquoi ils ne pourraient pas être définis aussi pour as_data_frame
.
as_data_frame
a deux méthodes supplémentaires, qui sont toutes deux définies dans dplyr
: as_data_frame.tbl_cube
et as_data_frame.grouped_df
.
as_data_frame.tbl_cube
utilisez la vérification plus faible de as.data.frame
(oui, gardez-la avec moi) pour appeler ensuite as_data_frame
:
> getAnywhere(as_data_frame.tbl_cube)
function (x, ...)
{
as_data_frame(as.data.frame(x, ..., stringsAsFactors = FALSE))
}
<environment: namespace:dplyr>
tandis que as_data_frame.grouped_df
dissocie la trame de données transmise.
Globalement, il semble que as_data_frame
devrait être considéré comme fournissant des fonctionnalités supplémentaires par rapport à as_tibble
, sauf si vous utilisez des objets ts
ou poly
.
Selon le introduction à tibble , il semble que les tibbles remplacent tbl_df
.
J’ai le plaisir d’annoncer que tibble, un nouveau logiciel de manipulation et d’impression de trames de données chez R. Tibbles, est une réinvention moderne du nom data.frame, qui permet de conserver le temps qui s’est avéré efficace et de jeter ce qui n’est pas. Le nom vient de dplyr: à l'origine, vous aviez créé ces objets avec
tbl_df()
, qui était plus facilement prononcé comme «tibble diff».[...] Ce paquet extrait les fonctions associées à la classe tbl_df de dplyr.
Pour ajouter à la confusion, tbl_df
appelle maintenant as_tibble
, qui est l'alias préféré pour as_data_frame
et as.tibble
: ( Le commentaire de Hadley Wickham sur le problème , et as_tibble docs )
> tbl_df
function (data)
{
as_tibble(data, .name_repair = "check_unique")
}
Selon la description de l'aide de tbl_df()
, il est obsolète et tibble::as_tibble()
doit être utilisé à la place. Les pages d’aide as_data_frame
et as.tibble
redirigent toutes les deux vers as_tibble
.
Lorsque vous appelez class
sur un tibble, le nom de la classe apparaît toujours sous la forme tbl_df
:
> as_tibble(mtcars) %>% class
[1] "tbl_df" "tbl" "data.frame"