我将感兴趣的变量名称存储在字符向量中。通常,我将这些向量存储在嵌套列表中(例如
variables$predictors$model1
),以减少混乱并更好地组织它们。出于这个原因,我通常使用子列表和列表索引。但是,我很难将此工作流程翻译成data.table
.
考虑将 data.table 子集化为名称在字符向量中的列子集的简单任务。如您所见,通常建议的子集方式不会提供预期的输出。更烦人的是,所需的输出需要使用
get()
(连同列表),这偶尔会出现不良行为。
对于这个简单的动作,这真的是
data.table
中最有效的方法吗?
为什么选项 1 到 4 只返回字符串?
library(data.table)
# Create data.table with three variables
dt <- data.table(a = c(1:3, NA), b = 1:4, c = c(NA, 1:3))
# Define column names of interest
column_names_of_interest <- c("b", "c")
# Subset by one of the column names
# Attempted approaches
# 1
dt[, column_names_of_interest[1]]
#[1] "b"
# 2
dt[, column_names_of_interest[[1]]]
# [1] "b"
# 3
dt[, ..column_names_of_interest[1]]
# [1] "b"
# 4
dt[, ..column_names_of_interest[[1]]]
# [1] "b"
# 5
dt[, get(column_names_of_interest[1])]
# [1] 1 2 3 4
# 6
dt[, .(get(column_names_of_interest[1]))]
# V1
# 1: 1
# 2: 2
# 3: 3
# 4: 4
dt <- data.table(a = c(1:3, NA), b = 1:4, c = c(NA, 1:3))
column_names_of_interest <- c("b", "c")
dt[, .SD, .SDcols = column_names_of_interest]
# b c
# 1: 1 NA
# 2: 2 1
# 3: 3 2
# 4: 4 3