В чем разница между Как.тиббл (), как фрейм данных () и 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 объекты.