I found this strange behavior when assigning a value to a position. If the variable has the same name as a column it thinks we are talking about the column:
library(data.table)
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=a]
Result:
> dt1 a 1: 0
We can avoid this by using different names:
dt2 <- data.table(a = integer(1))
b <- 18
dt2[1, a:=b]
Result:
>dt2 a 1: 18
But is there another way to do this without changing the name of the variable? I read about .() ..()
notation but I'm not sure whether I can use it here, something like:
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=..(a)]
Error in eval(expr, envir, enclos) : could not find function ".."
You can always use get
, which allows you to specify the environment:
dt1[1, a := get("a", envir = .GlobalEnv)]
# a
#1: 18
Or just:
a <- 42
dt1[1, a := .GlobalEnv$a]
# a
#1: 42
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With