cbind с таблицей данных и фреймом данных

У меня есть вопрос относительно характеристик 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

Случай 1: (первый параметр как кадр данных)

>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"

Случай 2: (первый параметр в виде таблицы данных)

>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"

Итак, мой вопрос заключается в том, как можно получить выходной объект в виде таблицы данных и фрейма данных в двух разных сценариях, где cbind не имеет метода data.table.

Это ясно в функции слияния, где R вызывает разные функции слияния в зависимости от первого параметра (если первый параметр является фреймом данных, который он вызывает, фреймом данных, а если это таблица данных, он вызывает метод слияния таблицы данных).


person Anuj    schedule 01.12.2015    source источник
comment
Попробуйте do.call(cbind, lapply(list(df, dt), setDT))   -  person akrun    schedule 01.12.2015
comment
Вы всегда можете вызвать метод напрямую.   -  person Rich Scriven    schedule 01.12.2015
comment
@RichardScriven да, мы можем это сделать, я просто хочу понять поведение cbind с другим классом входного объекта.   -  person Anuj    schedule 01.12.2015


Ответы (1)


Если вы посмотрите на код 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>

Довольно странно, я согласен - я ожидал метод cbind.data.table, но я предполагаю, что были некоторые веские причины, чтобы не делать этого.

person thothal    schedule 01.12.2015
comment
объяснение здесь: cran.r-project.org/web/packages /data.table/виньетки/ - person topchef; 04.11.2018