を使用するのは?set
どうですか?
> d=data.table(x=1:5,y=11:15,z=letters[1:5])
> set(d, 3L, 1:3, NA_character_)
> d
x y z
1: 1 11 a
2: 2 12 b
3: NA NA NA
4: 4 14 d
5: 5 15 e
> str(d)
Classes ‘data.table’ and 'data.frame': 5 obs. of 3 variables:
$ x: int 1 2 NA 4 5
$ y: int 11 12 NA 14 15
$ z: chr "a" "b" NA "d" ...
- attr(*, ".internal.selfref")=<externalptr>
または、単純に:
> d=data.table(x=1:5,y=11:15,z=letters[1:5])
> d[3] <- NA_character_
> str(d)
Classes ‘data.table’ and 'data.frame': 5 obs. of 3 variables:
$ x: int 1 2 NA 4 5
$ y: int 11 12 NA 14 15
$ z: chr "a" "b" NA "d" ...
- attr(*, ".internal.selfref")=<externalptr>
[マシューから]はい、どちらかset()
が進むべき道であるか、@mnelの答えは非常にきちんとしています:
DT[rownum, names(DT) := .SD[NA]]
アプローチに強制警告が存在するかどうかについてset
、内部コードを次に示します (重要な点を伝えるためにここで変更されています)。それを書いているときは、精度の低下 (からdouble
までinteger
) と、RHS を強制する非効率性を念頭に置いていたようです。
if( (isReal(RHS) && (TYPEOF(targetcol)==INTSXP || isLogical(targetcol))) ||
(TYPEOF(RHS)==INTSXP && isLogical(targetcol)) ||
(isString(targetcol))) {
if (isReal(RHS)) s3="; may have truncated precision"; else s3="";
warning("Coerced '%s' RHS to '%s' to match the column's type%s. ... <s3> ...
}
assign.c の完全なソースは、 https ://r-forge.r-project.org/scm/viewvc.php/pkg/src/assign.c?view=markup&root=datatable で確認できます。
これを改善するための非常によく似た機能要求があります。
FR#2551 シングルトン := 精度が失われない場合、RHS 強制警告なし
この質問に戻るリンクを追加しました。
一般的に、 wheredata.table
は潜在的な問題や非効率性について警告するのに慎重すぎます。このように、さまざまなタイプの列のセットを設定したい場合は、 with でラップするsuppressWarnings()
ことも別の方法です。