表的data.table与表的data.frame非常不同

表的data.table与表的data.frame非常不同,r,data.table,R,Data.table,我知道table是将频率表制作成数据。table。但假设我有一个表,无论出于什么原因,我都想将其转换为data.table。data.table转换的工作方式与data.frame转换的工作方式不同: library(data.table) tab <- table(1:101) DF.tab <- data.frame(tab) DT.tab <- data.table(tab) 还要注意的是,as.data.frame与data.frame的工作方式相同,as.data.

我知道
table
是将频率表制作成
数据。table
。但假设我有一个
,无论出于什么原因,我都想将其转换为
data.table
data.table
转换的工作方式与
data.frame
转换的工作方式不同:

library(data.table)
tab <- table(1:101)
DF.tab <- data.frame(tab)
DT.tab <- data.table(tab)
还要注意的是,
as.data.frame
data.frame
的工作方式相同,
as.data.table
完全失败:

> as.data.table(tab)
Error in UseMethod("as.data.table") : 
  no applicable method for 'as.data.table' applied to an object of class "table"
这似乎是一个非常密切相关的问题,如果表足够大(非正式测试建议
.Dim>100
),我在尝试
打印时会出现非常奇怪的错误:

> print(data.table(table(1:101)))
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  : 
  dims [product 5] do not match the length of object [10]
请注意,
print(data.table(table(1:100))
没有错误,但只显示一列
V1
,而
print(data.frame(table(1:100))
Var1
Freq


是否有比
data.table(data.frame(…)
更好的解决方法?我是否最好总是试图完全避免
table
并且
print
错误是直接由此引起的,还是更深层次的原因?

有一个
as.data.frame.table
函数,它是通过
data.frame(tbl对象)
调用的。它将类似矩阵的表对象转换为长格式数据对象。目前似乎还没有as.data.table.table函数,可以说应该有,我同意它应该以与as.data.frame方法相同的方式运行,而不是从矩阵继承(这是table通常继承的方式:

> data.table(matrix(1:10, 2))
   V1 V2 V3 V4 V5
1:  1  3  5  7  9
2:  2  4  6  8 10
> data.table(as.table(matrix(1:10, 2)))
Error in UseMethod("as.data.table") : 
  no applicable method for 'as.data.table' applied to an object of class "table"
> data.table(as.data.frame(as.table(matrix(1:10, 2))))
    Var1 Var2 Freq
 1:    A    A    1
 2:    B    A    2
 3:    A    B    3
 4:    B    B    4
 5:    A    C    5
 6:    B    C    6
 7:    A    D    7
 8:    B    D    8
 9:    A    E    9
10:    B    E   10
我认为这应该是一个功能要求,我不认为这与第二个问题有关


<>你的第二个问题看起来像是一个bug。<代码>数据>表>代码>作者最为显著的@ MatthewDowle通常是相当敏感的,你应该考虑提交一份报告。< /P>这似乎是一个漂亮的打印问题(如何<代码>数据>表>代码>当总行为100时打印前5行和下5行)…我认为问题在于
R
将频率表作为一个数组,其中每个唯一变量都有自己的维度,并且该唯一变量存储为
名称
。您应该提交一个功能请求和一个bug报告提交bug报告作为和功能请求作为。自2014年以来,有
作为.data.table.table
方法可用,最有可能在2017年更新(v1.10.2),或将添加新的
array
方法。如我所说。Matt是一名出色的维护人员,Arun是一名出色的贡献者。反应非常迅速,对将R分支变成不断发展和改进的资源非常感兴趣。我不知道这些MOD,也很高兴听到它们。我曾尝试在data.table j调用中使用
table
,并且对表演感到失望。
> data.table(matrix(1:10, 2))
   V1 V2 V3 V4 V5
1:  1  3  5  7  9
2:  2  4  6  8 10
> data.table(as.table(matrix(1:10, 2)))
Error in UseMethod("as.data.table") : 
  no applicable method for 'as.data.table' applied to an object of class "table"
> data.table(as.data.frame(as.table(matrix(1:10, 2))))
    Var1 Var2 Freq
 1:    A    A    1
 2:    B    A    2
 3:    A    B    3
 4:    B    B    4
 5:    A    C    5
 6:    B    C    6
 7:    A    D    7
 8:    B    D    8
 9:    A    E    9
10:    B    E   10