R数据表:为什么连接列表的值丢失了?

时间:2017-12-06 17:02:51

标签: r data.table

我正在介绍data.table插图 g)为什么让j保持灵活?显示一个与我的用例相关的示例:

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

我有一个最小的工作示例来说明问题

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)

对于size <- 10,很可能某些条目会导致NA,但这不是问题。问题是,超过某个size(大约6),我会丢失连接列表中的条目:

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
# [...]

从小插图运行相同的命令:

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,

现在,对于订单o=3val列表不包含所有条目(请参阅k打印输出,它应该到r)。

这里有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:1)

感谢您指出这一点;现在,非原子列的默认打印行为在截断时将包含...作为后缀。

您的示例(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,...