gpt4 book ai didi

r - as.tibble()、as_data_frame() 和 tbl_df() 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 04:03:40 32 4
gpt4 key购买 nike

我记得在某处读到 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() 这两个函数不能互换使用以获得相同的结果?

R documentation说的是

tbl_df() forwards the argument to as_data_frame()

这是否意味着 tbl_df()as_data_frame() 的包装器或别名? R 文档似乎没有提及 as.tibble() 的任何内容,我忘记了我在哪里读到它是 as_data_frame() 的别名。另外,apparently as_tibble()as_data_frame() 的另一个别名。

如果这四个函数确实都是同一个函数,那么给一个函数赋予四个不同的名称有什么意义呢?这不是更令人困惑而不是有帮助吗?

最佳答案

回答你的“是否令人困惑”的问题,我想是的:)。

as.tibbleas_tibble是相同的;两者都只是调用 S3 方法 as_tibble :

> as.tibble
function (x, ...)
{
UseMethod("as_tibble")
}
<environment: namespace:tibble>

as_data_frametbl_df不完全相同; tbl_df来电 as_data_frame :

> tbl_df
function (data)
{
as_data_frame(data)
}
<environment: namespace:dplyr>

注意tbl_df位于dplyras_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.tsas_tibble.poly 。我不太确定为什么不能将它们定义为 as_data_frame .

as_data_frame有两个附加方法,均在 dplyr 中定义:as_data_frame.tbl_cubeas_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 的附加功能,除非您正在处理 tspoly对象。

关于r - as.tibble()、as_data_frame() 和 tbl_df() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942328/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com