cbind包含数据表和数据框

Anu*_*nuj 5 r dataframe cbind data.table

我有关于数据表和数据框中的cbind特性的查询.如果我绑定数据帧(df)和数据表(dt),则结果对象的类取决于第一个参数.

例:

> dt<-data.table(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> df<-data.frame(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> dt
   x y z
1: 1 2 3
2: 2 3 4
3: 3 4 5
Run Code Online (Sandbox Code Playgroud)

案例1 :(第一个参数作为数据框)

>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)

案例2 :(第一个参数作为数据表)

>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是如何在两种不同的情况下将输出对象作为数据表和数据框来获取,其中cbind没有data.table方法.

在合并函数中很清楚,R根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,数据帧,如果是数据表,则调用合并的数据表方法).

对任何语法错误道歉,如果这是一个重复的问题,请告诉我.

谢谢.

tho*_*hal 5

如果您查看代码,cbind.data.frame您会发现对案例进行了检查data.table

cbind.data.frame
# function (..., deparse.level = 1) 
# {
#     if (!identical(class(..1), "data.frame")) 
#         for (x in list(...)) {
#             if (inherits(x, "data.table")) 
#                 return(data.table::data.table(...))
#         }
#     data.frame(..., check.names = FALSE)
# }
# <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

相当奇怪,我同意 - 我本来期望有一种cbind.data.table方法,但我想有一些很好的理由不这样做。

  • 解释在这里:https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.html#ive-noticed-that-basecbind.data.frame-and-baserbind.data。框架似乎要被 data.table 更改。-这如何可能-为什么 (3认同)