提问者:小点点

data. table NSE:将local()转义到周围环境


我很好奇为什么data. table的NSE即使在“local()”中也会逃逸到周围环境。

library(data.table)

data <- as.data.table(iris)

data[, measure := rep(c('Sepal.Length', 'Sepal.Width'), 75)]

# old way: using get
(data[, check := get(measure)][])

# issue: x is broadcast to entire column if not found in data
data$measure[1] <- 'x'

(data[, check := get(measure)][])

x <- 10

(local(data[, check := get(measure)][], envir = data))

sessionInfo()

R版本3.6.3(2020-02-29)平台:x86_64-w64-mingw32/x64(64-bit)运行于:Windows 10 x64(build 19044)

矩阵产品:默认

LC_COLLATE=English_United州LC_CTYPE=English_United州LC_MONETARY=English_United州LC_NUMERIC=C
LC_TIME=English_United州

附加的基础包:[1]stats图形grDevices utils数据集方法基础

其他附加软件包:[1]data.table_1.14.3

通过命名空间加载(且未附加):[1]compiler_3.6.3tools_3.6.3


共1个答案

匿名用户

我需要将环境传递给“get()”,而不是用“local()”包装调用

(data[, check := get(measure, envir = as.environment(.SD))][])

也可以用。SD方便