简体   繁体   中英

data.table := assignments when variable has same name as a column

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM