为什么选择具有字符向量元素的列需要 data.table 中的 get()?

问题描述 投票:0回答:1

上下文

我将感兴趣的变量名称存储在字符向量中。通常,我将这些向量存储在嵌套列表中(例如

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
r indexing data.table subset
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.