我之前曾问过这个问题,并认为我可能会发布一个示例,说明为什么我会看到效果,如果它可能会有所帮助:
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
没有返回vector
而data.table
没有抱怨。而是x[,a:=as.vector(scale(a))]
似乎可以解决问题。我是否错过了文档中的内容?
答案 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列或更多列的矩阵会发出警告。