2017-12-06 8 views
2

私はdata.table入門書で、のセクションにあります。なぜgを柔軟に保つのですか?例が示されているそれは私のユースケースに関連するのです: Rデータテーブル:連結リストの値が失われるのはなぜですか?

DT[, .(val = list(c(a,b))), by = ID] 
# ID   val 
# 1: b 1,2,3,7,8,9 
# 2: a 4, 5,10,11 
# 3: c  6,12 

は、私が問題に最も可能性の高いいくつかのエントリが NAになり size <- 10については

set.seed(1234) 
size   <- 10 
ordering_ids <- rep(1:size, sample(1:size, replace=TRUE)) 
products  <- letters[seq_along(ordering_ids)] 
k   <- data.table(o=ordering_ids, p=products) 

を説明するために、最小限の作業例を持っているが、それはありません問題。ビネットから同じコマンドを実行する

k 
#  o p 
# 1: 1 a 
# 2: 1 b 
# 3: 2 c 
# 4: 2 d 
# 5: 2 e 
# 6: 2 f 
# 7: 2 g 
# 8: 2 h 
# 9: 2 i 
# 10: 3 j 
# 11: 3 k 
# 12: 3 l 
# 13: 3 m 
# 14: 3 n 
# 15: 3 o 
# 16: 3 p 
# 17: 4 q 
# 18: 4 r 
# [...] 

:受注o=3のための今

k[o<=4, .(val=list(c(p))), by=o] 
# o   val 
# 1: 1   a,b 
# 2: 2 c,d,e,f,g,h, 
# 3: 3 j,k,l,m,n,o, 
# 4: 4 q,r,s,t,u,v, 

、問題は(6周り)size一定を超えて、私は連結リストのエントリを失うということであり、 valリストにはすべてのエントリが含まれていません(kのプリントアウトを参照してください。rまで)。

ここでの問題は何ですか?どのように修正できますか?

+0

おそらくそれは単に印刷されていません。値を確認するには 'k [、。(val = list(c)))、by = o] $ val [4]'とタイプします。 – www

+0

私は実際にそう思っていましたが、間違って印刷していました – TMOTTM

+1

より簡潔な形式でデータを参照する場合は、 'k [、toString(p)、by = o]'があります。私はここで6つの項目で切り捨てられているリストの問題を提起した:https://github.com/Rdatatable/data.table/issues/1523#issuecomment-349717900 – Frank

答えて

0

これを指摘していただきありがとうございます。非原子列のデフォルトの印刷動作(here)に変更を加えました。次のリリースからCRANで利用可能になります。開発版をご希望の場合は、Installation wikiをご覧ください。一般的に、以下で十分:

install.packages('data.table', type = 'source', 
       repos = 'http://Rdatatable.github.io/data.table') 

次にあなたの例(set.seed(1234)では、次になります):

k[o<=4, .(val=list(c(p))), by=o] 
#   o    val 
# 1: 1    a,b 
# 2: 2 c,d,e,f,g,h,... 
# 3: 3 j,k,l,m,n,o,... 
# 4: 4 q,r,s,t,u,v,... 
関連する問題