r语言 - Data.table ":=" 分配对 mtcars 给出"维数不正确"错误,但对其他示例数据没有



更新:我发现这是一个奇怪的怪癖。如果使用as.data.table(Foo(data.table中的Foo,则函数会正常工作,但如果将Foo复制为Bar&lt-当在Bar上使用时,Foo和data.table的函数会抛出一个错误。


我正在尝试学习data.table包的使用,因为我即将启动一个项目,该项目将在多个超大(>100K-1M行(表之间编辑单元格和来回复制行,据我所知,data.table在这些用例中的性能大大优于其他所有用例。

为了练习,我用这段代码用Y列第5行的数据替换了Y列的第2行,效果很好:

DT <- data.table(x = 1:5, y = 6:10, z = 11:15)
DT[2, y := DT[5, y]] 

另一方面,使用mtcars转换为va as.data.table的副本执行完全相同的操作,无论我尝试在哪一列中执行此操作,都会引发错误(为了澄清,"m"只是as.data.table((自动分配的第一列的名称(:

mtcarstable<-as.data.table(mtcars, keep.rownames = TRUE)
mtcarstable[2, m := mtcarstable[3, m]]
Error in mtcarstable[3, m] : incorrect number of dimensions

我发现的唯一其他关于"尺寸数量不正确"错误的引用似乎与这种情况无关。

我发现了故障。当发布这个问题时,我在代码中粘贴了原始代码作为.data.table((转换的mtcars副本。然而,我实际使用的是一个二阶副本,IE:

mtcarstable<-as.data.table(mtcars, keep.rownames = TRUE)
mtcars2<-mtcarstable
mtcars2[2, cyl := mtcars2[3, cyl]]

出于某种原因,这很好:

mtcarstable[2, wt := mtcarstable[3, wt]]

而另一方面,它的完美副本没有

mtcars2<-mtcarstable
mtcars2[2, wt := mtcars2[3, wt]]
Error in mtcars2[3, wt] : incorrect number of dimensions

最新更新