[datatable-help] := unclarity and possible bug?
Chris Neff
caneff at gmail.com
Thu Aug 4 14:12:59 CEST 2011
Hi all,
If I do:
DT <- data.table(x=1:10, y=rep(1:2,5))
Then try the following
DT[, z:=5]
I get:
> DT[, z:=5]
z
[1] 5
[1] TRUE
NULL
and if I were to do DT <- DT[, z:=5], then DT gets set to NULL.
Alternatively if I do
DT[1:10, z:=5]
I get
> DT=DT[1:nrow(DT),z:=5]
z
[1] 5
[1] 1 2 3 4 5 6 7 8 9 10
Error in `:=`(z, 5) :
Attempt to add new column(s) and set subset of rows at the same
time. Create the new column(s) first, and then you'll be able to
assign to a subset. If i is set to 1:nrow(x) then please remove that
(no need, it's faster without).
Which is more informative. So I do as it instructs:
DT$z <- NA
DT[, z:=5]
And as output I get:
> DT
x y z
[1,] 1 1 TRUE
[2,] 2 2 TRUE
[3,] 3 1 TRUE
[4,] 4 2 TRUE
[5,] 5 1 TRUE
[6,] 6 2 TRUE
[7,] 7 1 TRUE
[8,] 8 2 TRUE
[9,] 9 1 TRUE
[10,] 10 2 TRUE
Why isn't z 5 like assigned? I think it is because I assigned it as
NA, and data table didn't know to change it to integer (although why
it changed it to logical is another puzzle). If I instead do
DT$z <- 0
DT[, z:=5]
It works fine.
So my two points are:
A) Doing DT[,z:=5] should be as informative as doing DT[1:nrow(DT),
z:=5] with the error message.
B) What went wrong with the NA assignment I did?
Thanks!
Chris
More information about the datatable-help
mailing list