如何基于环境中的字符向量直接筛选data.table列?
无需临时变量筛选data.table列的优化方案
针对你提出的问题,以下两种无需创建临时变量的方案可以直接基于自定义环境(或列表内向量)筛选data.table列:
方案1:使用with = FALSE参数
data.table的with = FALSE参数允许直接将字符向量作为列名输入,无需将变量转移到全局环境。直接引用自定义环境中的变量即可:
library(data.table) # 构造示例数据 dt <- data.table(Column1 = 1:5, Column2 = 6:10, Column3 = 11:15) envir <- new.env() envir$list_of_fields <- c("Column1", "Column2") # 直接筛选列 dt[, envir$list_of_fields, with = FALSE]
方案2:使用.SDcols指定列范围
通过.SDcols参数指定要包含在.SD(Subset of Data)中的列,该参数可以直接接收来自任意环境的字符向量:
# 同样基于上述示例数据与环境变量 dt[, .SD, .SDcols = envir$list_of_fields]
针对列表内向量的扩展
如果目标列向量嵌套在列表中(比如envir$my_list$fields <- c("Column1", "Column2")),上述两种方案同样适用:
envir$my_list <- list(fields = c("Column1", "Column2")) # 方案1适配 dt[, envir$my_list$fields, with = FALSE] # 方案2适配 dt[, .SD, .SDcols = envir$my_list$fields]
内容的提问来源于stack exchange,提问作者Warpspace
相关产品推荐
相关产品推荐

