Data.table: = assignments when the variable has the same name as the column

I found this strange behavior when assigning a position value. If the variable has the same name as the column, it thinks we're talking about a 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 any other way to do this without changing the variable name? I read about the notation .() ..() , but I'm not sure if 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 ".." 
+6
source share
1 answer

You can always use get , which allows you to specify the environment:

 dt1[1, a := get("a", envir = .GlobalEnv)] # a #1: 18 

Or simply:

 a <- 42 dt1[1, a := .GlobalEnv$a] # a #1: 42 
+13
source

Source: https://habr.com/ru/post/1232094/


All Articles