我记得在某处读到 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()
forwards the argument toas_data_frame()
这是否意味着 tbl_df()
是 as_data_frame()
的包装器或别名? R 文档似乎没有提及 as.tibble()
的任何内容,我忘记了我在哪里读到它是 as_data_frame()
的别名。另外,apparently as_tibble()
是 as_data_frame()
的另一个别名。
如果这四个函数确实都是同一个函数,那么给一个函数赋予四个不同的名称有什么意义呢?这不是更令人困惑而不是有帮助吗?
最佳答案
回答你的“是否令人困惑”的问题,我想是的:)。
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
如果您查看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
对象。
关于r - as.tibble()、as_data_frame() 和 tbl_df() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942328/