私はちょっと驚きました。私は、dt_1
で行要素を置き換えるためにset()
を使用した場合、dt_3
の対応する要素は、同様に変更された:data.tableのset()を使用して以前に定義された変数を強制的に呼び出す
refcols=c("A","B")
dt_3 = data.table(A=c(1,1,3,5,6,7), B = c("x","y","z","q","w","e"), C = rep("NO",6))
dt_2 = data.table(A=c(3,5,7), B = c("z","q","x"), D=c(3,5,99))
dt_1 = dt_3
dt_3
A B C
1: 1 x NO
2: 1 y NO
3: 3 z NO
4: 5 q NO
5: 6 w NO
6: 7 e NO
for(j in refcols){
set(dt_1,2,j,dt_2[3,get(j)])
}
Warning messages:
1: In set(dt_1, 2, j, dt_2[3, get(j)]) :
Coerced i from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2
2: In set(dt_1, 2, j, dt_2[3, get(j)]) :
Coerced i from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2
dt_3
A B C
1: 1 x NO
2: 7 x NO
3: 3 z NO
4: 5 q NO
5: 6 w NO
6: 7 e NO
これを引き起こし、このような特定の列の明示的な行インデックスによってサブセットに簡単な方法が存在している何?
この警告は正確には何を意味していますか? 'set'の' i'引数に '2L'の代わりに' 2'を書いています。警告を読んで '?set'を読んでください – Frank