8

頻度 表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.frametableはデータを に変換し、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.framewhileは と同じように機能し、完全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)))1 つの列のみが表示されることに注意してください。V1print(data.frame(table(1:100)))Var1Freq

よりも良い回避策はありdata.table(data.frame(...))ますか?常にtable完全に回避しようとする方がよいでしょうか? そして、printエラーはこれによって直接引き起こされたものですか、それとももっと深いものですか?

4

1 に答える 1