怎么用?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 Singleton := 如果没有精度丢失,RHS 没有强制警告
已在此处添加了指向此问题的链接。
一般来说,data.table在警告您潜在问题或效率低下时过于谨慎,在这种情况下,您想要设置一组不同类型的列,换行suppressWarnings()是另一种方式。