5

data.tableで奇妙な動作に出くわしました。つまり、「:=」を使用してdata.tableの列の値を変更(置換)すると、別のdata.table(:=操作の前の元のdata.tableのコピー)の値も変更されるようです。 )。サンプルコードは以下のとおりです。

他の点では優れたパッケージについて基本的な何かが欠けていますか、それともバグレポートがあるべきですか?

サブ質問:ifelse()は、以下のように値を変更するための最良の方法ですか(かなり大きなテーブルで、最大10mの行)?十分に高速(数秒)で期待どおりに機能しますが、verbose = TRUE data.tableで文句を言います(「アイテム1のRHSが複製されました。NAMEDベクトルまたはリサイクルリストRHSのいずれかです。)。これまでのメッセージを解読します:)

library(data.table)
options(datatable.verbose=TRUE)
DT1 <- data.table(f=as.integer(c(1,2,1,1,1,2,1)))
DT2 <- DT1

tables()

DT1
DT2
identical(DT1, DT2) # OK, they should be identical.

# I am not sure ifelse() is the best way to do this, but it does what I want, even though data.table complains
DT1[, f := as.character(ifelse(f==1,"a","b"))]

tables()
DT1
DT2
identical(DT1, DT2) # Not OK -- why did DT2 change?

関連する場合、私のシステムは次のとおりです。

R version 2.15.3 (2013-03-01) -- "Security Blanket"
Platform: x86_64-w64-mingw32/x64 (64-bit)
data.table 1.8.8
All 943 tests in test.data.table() completed ok in 27.869sec

ありがとう。

4

0 に答える 0