为什么在data.table中的R中运行scale后来自na.omit的错误?

时间:2012-10-25 20:13:24

标签: r data.table

我之前曾问过这个问题,并认为我可能会发布一个示例,说明为什么我会看到效果,如果它可能会有所帮助:

require(data.table)
x <- data.table(a=1:10)
x[,a:=scale(a)]
#    [,1]      
# 1: -1.4863011
# 2: -1.1560120
# 3: -0.8257228
# 4: -0.4954337
# 5: -0.1651446
# 6:  0.1651446
# 7:  0.4954337
# 8:  0.8257228
# 9:  1.1560120
#10:  1.4863011
na.omit(x)
Error in `[.data.table`(object, !omit) : 
  i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list     of elements of DT (in the spirit of A[B] in FAQ 2.14). Please let datatable-help know if     you'd like this, or add your comments to FR #1611.

原因似乎是scale没有返回vectordata.table没有抱怨。而是x[,a:=as.vector(scale(a))]似乎可以解决问题。我是否错过了文档中的内容?

1 个答案:

答案 0 :(得分:3)

好问题(我稍微编辑过)。它应该是一个警告,或者data.table可以自动将1列matrix强制转换为向量,因为我猜你所展示的scale是一项常见任务,并且很自然地做那。 na.omit方面是揭示问题的一种方式,但是可能还有其他方法,因为你很好地展示了根本原因。

提交错误报告,谢谢:

Bug#2333 := is able to create a "matrix" column, but "matrix" columns are invalid


更新:根本原因现在已在v1.8.3中修复。将1列矩阵静默处理为载体。具有2列或更多列的矩阵会发出警告。