Yes I am using the latest version with type="source" now (just forgot to update today before sending off the message) and that makes the second question about multiple := fixed, but the first one is still relevant.
On 4 August 2011 08:38, Matthew Dowle <[email protected]> wrote: > I suspect you don't have the latest version of 1.6.3, see the commit log. > > Perhaps subscribe to datatable-commits, so you know when to re-install from > R-Forge using type="source", and try again. I won't suggest waiting for > CRAN as you're already ok using latest from R-Forge (which is now 1.6.4). > > Matthew > > "Chris Neff" <[email protected]> wrote in message > news:CAAuY0RVA4yLjb9xuOJNdq5ca=egrilvsve-fnsj2cjnl2nl...@mail.gmail.com... > A second question while I'm playing with it. It seems from the FRs > that it doesn't support multiple := in one select, but: > > DT <- data.table(x=1:10, y=rep(1:2,10)) > DT$a = 0 > DT$z = 0 > > DT[, list(a := y/sum(y), z := 5)] > > works just fine for me. An error gets thrown but afterwards the > columns are modified as intended. Why the error? > >> DT[,list(z:=5,a:=y/sum(y))] > z > [1] 5 > [1] TRUE > a > y/sum(y) > [1] TRUE > Error in data.table(`:=`(z, 5), `:=`(a, y/sum(y))) : > column or argument 1 is NULL >> DT > x y z a > [1,] 1 1 5 0.06666667 > [2,] 2 2 5 0.13333333 > [3,] 3 1 5 0.06666667 > [4,] 4 2 5 0.13333333 > [5,] 5 1 5 0.06666667 > [6,] 6 2 5 0.13333333 > [7,] 7 1 5 0.06666667 > [8,] 8 2 5 0.13333333 > [9,] 9 1 5 0.06666667 > [10,] 10 2 5 0.13333333 > > -Chris > > On 4 August 2011 08:12, Chris Neff <[email protected]> wrote: >> 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 >> > > > > _______________________________________________ > datatable-help mailing list > [email protected] > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help > _______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
