Chi*_*cht 14 terminology r dplyr tidyverse tibble
我记得读书的地方,as.tibble()是一个别名的as_data_frame(),但我不知道到底是什么的别名是在编程术语.它与包装器类似吗?
所以我想我的问题大概可以归结为在两者之间可能的用法区别tbl_df()和as_data_frame():什么是它们之间的区别,如果有的话?
更具体地说,给定(非tibble)数据帧df,我经常使用以下方法将其转换为tibble:
df <- tbl_df(df)
Run Code Online (Sandbox Code Playgroud)
岂不
df <- as_data_frame(df)
Run Code Online (Sandbox Code Playgroud)
做同样的事?如果是这样,是否存在其他两种功能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().
如果这四个函数的功能完全相同,那么赋予一个函数四个不同名称的意义何在?这不是更有说服力而不是有用吗?
rsm*_*h54 13
要回答你的问题"它是否令人困惑",我想是这样:).
as.tibble并且as_tibble是一样的; 两者都只是调用S3方法as_tibble:
> as.tibble
function (x, ...)
{
UseMethod("as_tibble")
}
<environment: namespace:tibble>
Run Code Online (Sandbox Code Playgroud)
as_data_frame而且tbl_df并不完全一样; tbl_df来电as_data_frame:
> tbl_df
function (data)
{
as_data_frame(data)
}
<environment: namespace:dplyr>
Run Code Online (Sandbox Code Playgroud)
注tbl_df是dplyr同时as_data_frame在tibble包装:
> as_data_frame
function (x, ...)
{
UseMethod("as_data_frame")
}
<environment: namespace:tibble>
Run Code Online (Sandbox Code Playgroud)
但当然它调用相同的功能,所以它们是"相同的",或者你说的别名.
现在,我们可以看看泛型方法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
Run Code Online (Sandbox Code Playgroud)
如果您查看代码 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>
Run Code Online (Sandbox Code Playgroud)
而as_data_frame.grouped_df取消组合传递数据帧.
总的来说,似乎as_data_frame应该被视为提供额外的功能as_tibble,除非您正在处理ts或poly对象.