【发布时间】:2020-03-19 02:08:06
【问题描述】:
更新:我发现这是一个奇怪的怪癖。如果使用 as.data.table(Foo) 中的 Foo,data.table 的函数可以正常工作,但如果您将 Foo 复制为 Bar
我正在尝试学习 data.table 包的使用,因为我即将开始一个项目,该项目将执行 很多 编辑单元格并在多个极端之间来回复制行大型(> 100K-1M 行)表,据我了解,data.table 在这些用例中大大优于其他所有表。
为了练习,我使用此代码将 Y 列的第 2 行替换为 Y 列第 5 行的数据,效果很好:
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
我发现的“不正确的维数”错误的唯一其他参考似乎与这种情况没有任何关系。
【问题讨论】:
-
在您的 qn 中,m 是什么?如果它是列名的字符向量,您可能正在寻找
mtcarstable[2, (m) := mtcarstable[3, m]] -
我无法重现您的错误,除了 'm' 不是 mtcars 中的列的问题。例如
mtcarstable[2, wt := mtcarstable[3, wt]]似乎工作正常。 -
"m" 只是 as.data.table 在我将其设置为保留行名时自动分配的名称,但实际上我认为我刚刚发现了问题......并打开了一个新的.使用由 as.data.table() 直接转换的 data.table 可以正常工作,但是如果您复制该 data.table (IE Foo
标签: r data.table