В чем разница между Как.тиббл (), как фрейм данных () и tbl df ()?
я где-то читал, что as.tibble()
это псевдоним на as_data_frame()
, но я не знаю, что именно псевдоним в терминологии программирования. Это похоже на обертку?
поэтому я думаю, что мой вопрос, вероятно, сводится к разнице в возможных использованиях между tbl_df()
и as_data_frame()
: каковы различия между ними, если таковые имеются?
более конкретно, учитывая (non-tibble) фрейм данных df
, Я часто превращаю его в тиббл с помощью:
df <- tbl_df(df)
не
df <- as_data_frame(df)
сделать то же самое? Если да, то существуют ли другие случаи, когда две функции tbl_df()
и as_data_frame()
нельзя использовать взаимозаменяемо, чтобы получить тот же результат?
на R документация говорит, что
tbl_df()
вперед аргументаas_data_frame()
значит tbl_df()
- это обертка или псевдоним для as_data_frame()
? R документация не кажется сказать что-нибудь о as.tibble()
и я забыл, где я читал, что это был псевдоним as_data_frame()
. Кроме того,видимо as_tibble()
еще один псевдоним as_data_frame()
.
если эти четыре функции действительно являются одной и той же функцией, какой смысл давать одной функции четыре разных имени? Разве это не более запутанно, чем полезно?
1 ответов
чтобы ответить на ваш вопрос "сбивает ли это с толку", я так думаю :) .
as.tibble
и as_tibble
одинаковы; оба просто вызывают метод S3 as_tibble
:
> as.tibble
function (x, ...)
{
UseMethod("as_tibble")
}
<environment: namespace:tibble>
as_data_frame
и tbl_df
не совсем то же самое;tbl_df
звонки as_data_frame
:
> tbl_df
function (data)
{
as_data_frame(data)
}
<environment: namespace:dplyr>
Примечание tbl_df
находится в dplyr
пока as_data_frame
находится в tibble
пакет:
> as_data_frame
function (x, ...)
{
UseMethod("as_data_frame")
}
<environment: namespace:tibble>
но, конечно, он вызывает ту же функцию, поэтому они "те же" или псевдонимы, что и вы сказать.
теперь мы можем посмотреть на различия между универсальными методами as_tibble
и as_data_frame
. Во-первых, мы рассмотрим методы каждого:
> 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
если вы посмотрите код as_tibble
, вы можете видеть, что определения для многих из as_data_frame
так же методами. as_tibble
определяет два дополнительных метода, которые не определены для as_data_frame
, as_tibble.ts
и as_tibble.poly
. Я не совсем уверен, почему они не могут быть также определены для as_data_frame
.
as_data_frame
имеет два дополнительных метода, которые оба определены в dplyr
: as_data_frame.tbl_cube
и as_data_frame.grouped_df
.
as_data_frame.tbl_cube
используйте более слабую проверку as.data.frame
(да, медведь со мной), чтобы потом позвонить as_data_frame
:
> getAnywhere(as_data_frame.tbl_cube)
function (x, ...)
{
as_data_frame(as.data.frame(x, ..., stringsAsFactors = FALSE))
}
<environment: namespace:dplyr>
пока as_data_frame.grouped_df
разгруппировать переданный фрейм данных.
в целом, мне кажется, что as_data_frame
следует рассматривать в качестве дополнительных функций as_tibble
, если вы не имеете дело с ts
или poly
объекты.