当data.frame没有时,为什么data.table将矩阵循环到单个向量中?

时间:2014-09-27 00:42:28

标签: r matrix dataframe data.table

比较以下data.tabledata.frame的行为:

a.matrix <- matrix(seq_len(25),ncol = 5, nrow = 5)

a.list <- list(seq_len(5),a.matrix)

a.dt <- as.data.table(a.list)
a.df <- as.data.frame(a.list)
a.dt.df <- as.data.table(a.df)

str(a.dt)
str(a.df)
str(a.dt.df)

data.table将矩阵的列重新循环到适当长度的矢量中:

> str(a.dt)
Classes ‘data.table’ and 'data.frame':  25 obs. of  2 variables:
 $ V1: int  1 2 3 4 5 1 2 3 4 5 ...
 $ V2: int  1 2 3 4 5 6 7 8 9 10 ...
 - attr(*, ".internal.selfref")=<externalptr> 

另一方面,data.frame会打破每一列:

> str(a.df)
'data.frame':   5 obs. of  6 variables:
 $ X1.5: int  1 2 3 4 5
 $ X1  : int  1 2 3 4 5
 $ X2  : int  6 7 8 9 10
 $ X3  : int  11 12 13 14 15
 $ X4  : int  16 17 18 19 20
 $ X5  : int  21 22 23 24 25

我目前使用as.data.table快速获取此行为的解决方法只是通过as两个coercers提供此行为:

> str(a.dt.df)
Classes ‘data.table’ and 'data.frame':  5 obs. of  6 variables:
 $ X1.5: int  1 2 3 4 5
 $ X1  : int  1 2 3 4 5
 $ X2  : int  6 7 8 9 10
 $ X3  : int  11 12 13 14 15
 $ X4  : int  16 17 18 19 20
 $ X5  : int  21 22 23 24 25
 - attr(*, ".internal.selfref")=<externalptr> 

为什么会出现差异,是否可以通过data.frame快速获取data.table行为?

1 个答案:

答案 0 :(得分:1)

正如在评论中提到的那样,在SO端关闭这个,现在在github上作为bug/issue处理,添加到本文的data.table里程碑v1.9.8中。


后续

现在按照commit 64f377...

解决了这个问题