什麼?
> 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
方法中是否存在脅迫警告,以下是內部代碼(在此修改以傳達e突出點)。在寫這篇文章的時候,我似乎已經失去了精確性(從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的完整的源代碼可以在這裏inpected:
https://r-forge.r-project.org/scm/viewvc.php/pkg/src/assign.c?view=markup&root=datatable
有改善這種高度相似的特性要求:
FR#2551 Singleton := RHS no coerce warning if no precision lost
是否添加有聯繫回到這個問題。
一般情況下,data.table
在警告您潛在的問題或效率低下時會比較謹慎,在這種情況下,如果您想設置一組不同類型的列,則使用suppressWarnings()
是另一種方式。
如果你想設置的完整行'NA',爲什麼不乾脆刪除它? – Roland 2013-03-21 18:06:18