展开时出现奇怪的错误 data.table

Strange error when expanding data.table

We stumbled upon some strange behaviour trying to expand a data.table. 下面的代码可以正常工作:

dt <- data.table(var1=1:2e3, var2=1:2e3, freq=1:2e3)
system.time(dt.expanded <- dt[ ,list(freq=rep(1,freq)),by=c("var1","var2")])
##    user  system elapsed 
##    0.05    0.01    0.06

但是使用下面的data.table

set.seed(1)
dt <- data.table(var1=sample(letters,1000,replace=T),var2=sample(LETTERS,1000,replace=T),freq=sample(1:10,1000,replace=T))

使用相同的代码给出

Error in rep(1, freq) : invalid 'times' argument

我的问题
这可能是 data.table 中的错误吗?

(我从R Machine Learning Essentials得到这个例子的语法)

编辑
所以问题似乎确实出在 rep 而不是 data.tablerep 的帮助页面对参数 times 说:

A integer vector giving the (non-negative) number of times to repeat each element if of length length(x), or to repeat the whole vector if of length 1.

第二个 data.table 创建的 timesx 的长度不同,这会引发错误。

我的猜测:当 rep(x,times) 被赋予 times 的向量时,它坚持认为 x 是相同的长度(而不是在 R 中做自然的事情和回收)。所以手动回收有效:

dt[ ,.(rep(rep(1,.N),freq)), by=.(var1,var2)]

似乎是 base R 的问题(或者可能是故意的?),而不是 data.table。 OP 在第一个示例中没有遇到这个问题,因为 by=.(var1,var2) 确保每个组只返回一行,所以 times 参数是一个标量。