要回答您“是否令人困惑”的问题,我认为是这样:)。
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
对象。