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.

その理由は、aをscale返さず、文句を言わなかったためと思われます。代わりに実行すると、問題が解決するようです。ドキュメントで何かを見逃したことがありますか?vectordata.tablex[,a:=as.vector(scale(a))]

4

1 に答える 1

3

良い質問です(少し編集しました)。警告であるかdata.table、1列matrixをベクトルに自動的に強制することができます。これscaleは、あなたが示した方法が一般的なタスクであり、そのようにするのが自然なことだと思います。アスペクトは問題を明らかにする1つのna.omit方法ですが、あなたがうまく示したように根本的な原因がさらに上にあるので、おそらく他の方法があります。

バグレポートが提出されました、ありがとう:

バグ#2333:=は「マトリックス」列を作成できますが、「マトリックス」列は無効です


更新:根本原因はv1.8.3で修正されました。1列の行列は、黙ってベクトルとして扱われます。2列以上の行列は警告を出します。

于 2012-10-26T08:37:39.450 に答える