在使用data.table中的scale函数后,为什么会出现na.omit错误?

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 不返回一个 vector,而且 data.table 没有报错。 使用 x[,a:=as.vector(scale(a))] 可以解决这个问题。 我是否在文档中漏掉了什么?

听起来你正在试图将data.table的错误报告发布到错误的论坛。也许你应该将它发布到http://lists.r-forge.r-project.org/mailman/listinfo/datatable-help。 - Maiasaura
1
是的,之前有人建议过这个。我只是在这里发布它,以防其他用户遇到同样的问题,这样他们就可以避免像我一样花费大量时间挖掘代码。 - Alex
2
@Alex,你可以把这个重新改成一个问题。然后提供问题的答案。 - bill_080
1个回答

3

这是一个好问题(我稍作编辑)。应该要么发出警告,要么data.table可以自动将1列的matrix强制转换为向量,因为我猜测在你展示的方式中scale是一项常见任务并且很自然就像那样执行。使用na.omit方面揭示了这个问题,但可能还有其他方法,因为根本原因像你漂亮地展示的那样更高级。

错误报告已提交,谢谢:

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接