我知道这table
不是将 频率表制作为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)
data.frame
将table
数据转换为data.frame
, 同时data.table
尝试将原始table
对象存储为列。(除其他示例外,我已经使用tab <- table(1:n)
的多个值对此进行了测试。)n
> str(DF.tab)
'data.frame': 101 obs. of 2 variables:
$ Var1: Factor w/ 101 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Freq: int 1 1 1 1 1 1 1 1 1 1 ...
> str(DT.tab)
Classes ‘data.table’ and 'data.frame': 101 obs. of 1 variable:
$ tab: 'table' int [1:101(1d)] 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "dimnames")=List of 1
.. ..$ : chr "1" "2" "3" "4" ...
- attr(*, ".internal.selfref")=<externalptr>
另请注意,虽然与 ,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
:
> 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
由这个直接引起的,还是更深层次的?