【问题标题】:Data.table ":=" assignment gives "incorrect number of dimensions" error with mtcars but not other sample dataData.table ":=" assignment 给出了 mtcars 的“不正确的维数”错误,但没有其他样本数据
【发布时间】: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


【解决方案1】:

我发现了故障。发布此问题时,我将原始 as.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

【讨论】:

  • 为什么错误是 cyl 而不是 wt?我认为您在控制台中感到困惑。您可能想要重新启动您的 R 并在脚本中写下您的代码并按顺序运行它。目前,您的声明不可重复
  • 是的,如果你想要一个数据表的单独副本,你应该使用data.table::copy
  • 这是一个简单的错字。至于为什么不能复现,我没有答案。我首先要做的唯一事情是: Foo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多