3

data.tableの最新バージョン1.8.1(R-forgeで利用可能)にアップグレードした後、次の問題が発生しました。そのバージョンまで、私はこれを行うことができました:

DT = data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT
   a b
1: A 4 
2: A 5
3: B 6
4: C 7

DT[ ,newcol := NA]

つまり、NAで満たされた新しい列を追加することができました。NAの論理タイプがサポートされていないというエラーが表示されます(実際にDT[ ,newcol := TRUE]はどちらも機能しません)。

だから今、私は最初に二重の列を追加し、次にそれをNAまたは私が必要とする論理に設定することによってそれを回避します:

DT[ ,newcol:=1]
a b newcol
1: A 4      1
2: A 5      1
3: B 6      1
4: C 7      1

DT[ ,newcol:=NA]
a b newcol
1: A 4      NA
2: A 5      NA
3: B 6      NA
4: C 7      NA

これが正しい方法かどうかを尋ねたかったのです。大したことではないと思います。それはそのようにうまく機能しています、ただ不必要なステップを避けたかっただけです。

4

1 に答える 1

2

このバグが修正されるまで(上記のMatthew Dowleのコメントを参照)、新しい列で必要なNAのタイプを直接指定することで回避できます(もちろん、機能しないタイプである「論理」を除く)。この時点で):

DT <- data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT[ ,newcol := NA_real_]  ## Other options are NA_integer_ and NA_character_ 
#    a b newcol
# 1: A 4     NA
# 2: A 5     NA
# 3: B 6     NA
# 4: C 7     NA

## Plain old NA has type and class "logical", partly explaining the 
## error message returned by DT[,newcol:=NA]
c(typeof(NA), class(NA))
# [1] "logical" "logical"
于 2012-06-20T15:36:51.257 に答える