as.tibble(),as_data_frame()和tbl_df()有什么区别?

寒意2

我记得读书的地方,as.tibble()是一个别名as_data_frame(),但我不知道到底是什么的别名是在编程术语。它类似于包装纸吗?

因此,我想我的问题可能归结于tbl_df()之间的可能用法as_data_frame()的区别:如果有,它们之间有什么区别?

更具体地说,给定一个(非标记)数据帧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()

如果这四个功能确实都是相同的功能,那么给一个功能赋予四个不同的名称有什么意义?这不是很有帮助的吗?

史密斯

要回答您的“是否令人困惑”问题,我认为是:)。

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_dfdplyr同时as_data_frametibble包装:

> 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_frameas_tibble.tsas_tibble.poly我不太确定为什么也不能为它们定义它们as_data_frame

as_data_frame具有两个额外的方法,这是在两者定义dplyras_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_tibbletspoly

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章