data.table := 当变量与列同名时赋值
data.table := assignments when variable has same name as a column
我在为某个位置赋值时发现了这种奇怪的行为。如果变量与列同名,它认为我们正在谈论该列:
library(data.table)
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=a]
结果:
> dt1
a
1: 0
我们可以通过使用不同的名称来避免这种情况:
dt2 <- data.table(a = integer(1))
b <- 18
dt2[1, a:=b]
结果:
>dt2
a
1: 18
但是有没有另一种方法可以在不更改变量名称的情况下做到这一点?我读到了 .() ..()
符号,但我不确定我是否可以在这里使用它,比如:
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=..(a)]
Error in eval(expr, envir, enclos) : could not find function ".."
您始终可以使用 get
,它允许您指定环境:
dt1[1, a := get("a", envir = .GlobalEnv)]
# a
#1: 18
或者只是:
a <- 42
dt1[1, a := .GlobalEnv$a]
# a
#1: 42
我在为某个位置赋值时发现了这种奇怪的行为。如果变量与列同名,它认为我们正在谈论该列:
library(data.table)
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=a]
结果:
> dt1 a 1: 0
我们可以通过使用不同的名称来避免这种情况:
dt2 <- data.table(a = integer(1))
b <- 18
dt2[1, a:=b]
结果:
>dt2 a 1: 18
但是有没有另一种方法可以在不更改变量名称的情况下做到这一点?我读到了 .() ..()
符号,但我不确定我是否可以在这里使用它,比如:
dt1 <- data.table(a = integer(1))
a <- 18
dt1[1, a:=..(a)]
Error in eval(expr, envir, enclos) : could not find function ".."
您始终可以使用 get
,它允许您指定环境:
dt1[1, a := get("a", envir = .GlobalEnv)]
# a
#1: 18
或者只是:
a <- 42
dt1[1, a := .GlobalEnv$a]
# a
#1: 42