15

私の質問は、以前に回答したものを拡張したものです。

1回の関数呼び出しでR data.tableに複数の列を追加しますか?

data.table にサブセット化するキーがある場合、複数の新しい列を割り当てるのに問題があります。例:

library(data.table)
example(data.table)
DT[J("a")]
   x y  v  m
1: a 1 42 42
2: a 3 42 42
3: a 6 42 42

つまり、DT には があり、上記のソリューションと同様に、2 つの新しい列を1 回の呼び出しでkey(DT) = c("x", "y")割り当てたいと考えています。私はこれをします:new1new2

DT[J("a"),c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]

しかし、私はそれを理解します

   x y  v  m new1
1: a 1 42 42    1
2: a 3 42 42    2
3: a 6 42 42    3
4: b 1  4  5   NA
5: b 3  5  5   NA
6: b 6  6  5   NA
7: c 1  7  8   NA
8: c 3  8  8   NA
9: c 6  9  8   NA

つまり、期待どおりの動作 (x==a の場所に値を割り当て、その他の場合は NA) ですが、最初の列のみです。それは私の間違いですか、それともバグですか?

DT をサブセット化しなくても、これは完全に機能することに注意してください。

DT[,c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]
   x y  v  m new1 new2
1: a 1 42 42    1    3
2: a 3 42 42    2    2
3: a 6 42 42    3    1
4: b 1  4  5    1    3
5: b 3  5  5    2    2
6: b 6  6  5    3    1
7: c 1  7  8    1    3
8: c 3  8  8    2    2
9: c 6  9  8    3    1
4

1 に答える 1

9

これは新しいバグです。を提出してくださいbug.report(package="data.table")

ありがとう。

===

v1.8.3 で修正されました。Bug#2215最新ニュース.

于 2012-08-21T13:41:58.640 に答える