我很好奇为什么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
我需要将环境传递给“get()”,而不是用“local()”包装调用
(data[, check := get(measure, envir = as.environment(.SD))][])
也可以用。SD方便