我们在尝试扩展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
中的一个bug吗?
(我从R机器学习基础中获取了这个示例的语法)
编辑
所以问题似乎真正出在rep
上,而不是data.table
。 rep
的帮助页面对于参数times
说:
如果长度为length(x),则给出一个整数向量,表示重复每个元素的次数(非负),或者如果长度为1,则重复整个向量。
第二个data.table
创建的times
与x
的长度不同,这导致了错误。