4

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

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不返回a vectordata.table也没有抱怨。相反,这样做x[,a:=as.vector(scale(a))]似乎可以解决问题。我错过了文档中的某些内容吗?

4

1 回答 1

3

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

已提交错误报告,谢谢:

Bug#2333:=能够创建“矩阵”列,但“矩阵”列无效


更新:根本原因现已在 v1.8.3 中修复。1 列矩阵被默默地视为向量。具有 2 列或更多列的矩阵会发出警告。

于 2012-10-26T08:37:39.450 回答