Forgot to say, please add a bug.report(package="data.table") for the errors. Thanks.
"Matthew Dowle" <[email protected]> wrote in message news:[email protected]... > > Hi. Thanks for reporting. The 'correct' ways that work using := are the > best ways going forward. But agreed, will fix so that all ways work. > > "Leon Baum" <[email protected]> wrote in message > news:[email protected]... >> >> Hello, >> >> I believe that all of the following should result in the same data.table >> (ignoring different orderings), but some of them give me errors: >> >> >>> dt <- data.table(x=letters[1:2], y=rnorm(4)) >>> dt[c(1, 3), ]$y <- 0 >>> dt >> x y >> [1,] a 0.000000 >> [2,] b -1.645834 >> [3,] a 0.000000 >> [4,] b -1.311856 >> # correct >> >>> dt <- data.table(x=letters[1:2], y=rnorm(4)) >>> dt[x == "a", ]$y <- 0 >> Error in `[<-.data.frame`(x, i, j, value) : object 'x' not found >> # bad >> >>> dt <- data.table(x=letters[1:2], y=rnorm(4)) >>> dt[x == "a", y:=0] >> x y >> [1,] a 0.0000000 >> [2,] b -0.1028541 >> [3,] a 0.0000000 >> [4,] b 0.3569112 >> # correct >> >>> dt <- data.table(x=letters[1:2], y=rnorm(4), key="x") >>> dt["a", ]$y <- 0 >> Warning messages: >> 1: In `[<-.data.frame`(x, i, j, value) : >> replacement element 1 has 2 rows to replace 1 rows >> 2: In `[<-.data.frame`(x, i, j, value) : >> replacement element 2 has 2 rows to replace 1 rows >>> dt >> x y >> [1,] a -0.4444458 >> [2,] a -2.1279203 >> [3,] b -1.9065767 >> [4,] b 0.5903236 >> [5,] a 0.0000000 >> # bad >> >>> dt <- data.table(x=letters[1:2], y=rnorm(4), key="x") >>> dt["a", y:=0] >> x y >> [1,] a 0.00000000 >> [2,] a 0.00000000 >> [3,] b 1.05028739 >> [4,] b -0.02362426 >> # correct >> >> I am using R-2.13.1 and data.table 1.6.6. >> >> -Leon _______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
