我记得曾在as.tibble()
读到as_data_frame()
是别名的地方,但我不知道编程中别名到底是什么术语。它与包装器类似吗?
所以我想我的问题可能归结为tbl_df()
和as_data_frame()
之间可能使用的差异:它们之间有什么区别,如果有的话?
更具体地说,给定(非tibble)数据帧df
,我经常使用以下方法将其转换为tibble:
df <- tbl_df(df)
不会
df <- as_data_frame(df)
做同样的事情?如果是这样,是否存在其他两种函数tbl_df()
和as_data_frame()
无法互换使用以获得相同结果的情况?
tbl_df()
将参数转发给as_data_frame()
是否意味着tbl_df()
是as_data_frame()
的包装或别名? R文档似乎没有提及as.tibble()
的任何内容,我忘了在哪里读到它是as_data_frame()
的别名。另外,apparently as_tibble()
是as_data_frame()
的另一个别名。
如果这四个函数的功能完全相同,那么赋予一个函数四个不同名称的意义是什么?这不是更有说服力而不是有用吗?
答案 0 :(得分:12)
回答你的问题&#34;是否令人困惑&#34;,我想是这样:)。
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>
但当然它会调用相同的功能,因此它们与你说的相同&#34;或别名。
现在,我们可以看一下通用方法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
如果您查看code for 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
个对象。
答案 1 :(得分:0)
根据introduction to tibble,似乎小玩意取代了tbl_df
。
我很高兴地宣布tibble,这是一个用于在R中处理和打印数据帧的新程序包。Tibbles是对data.frame的现代重新构想,保留了证明有效的时间,而舍弃了无效的时间。名称来自dplyr:最初是使用
tbl_df()
创建这些对象的,最容易发音为“ tibble diff”。[...]此软件包从dplyr中提取了与tbl_df类相关的函数。
为了增加混乱,tbl_df
现在调用as_tibble
,它是as_data_frame
和as.tibble
的首选别名:(Hadley Wickham's comment on the issue和{{ 3}})
> tbl_df
function (data)
{
as_tibble(data, .name_repair = "check_unique")
}
根据tbl_df()
的帮助描述,不建议使用它,而应使用tibble::as_tibble()
。 as_data_frame
和as.tibble
帮助页面都重定向到as_tibble
。
在小标题上调用class
时,类名仍显示为tbl_df
:
> as_tibble(mtcars) %>% class
[1] "tbl_df" "tbl" "data.frame"