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