R data.table 范围,使用变量可靠地引用未知列名

标签 r data.table

我想允许我的函数的用户使用任意列名,我需要在 data.table 中引用这些。从 var 获取列名是有效的,除非 var 的名称也是 dt 的列。我想要一个解决方案来修改我的引用方法(即 get(id) ),以便它在变量和列名重叠的情况下以及它们不重叠的情况下工作 - - 对于 data.table v1.14.0,当列与变量同名(包含所需的列引用)时,该列优先,这会破坏 get(id)

dt=data.table(id='id1') 
id='id'
dt[get(id) %in% 'id1',] #fails

dt=data.table(subject='id1') 
id='subject'
dt[get(id) %in% 'id1',] #works

有很多与通过变量引用列名相关的问题,但我找不到避免这种极端情况的解决方案,即用户碰巧使用与我的引用变量相同的列名。

最佳答案

最近在 data.table 中实现了针对这类问题的正确解决方案。有新的 env 参数,它没有 local-data.table 范围。用户不再需要使用 get

library(data.table)
dt=data.table(id='id1') 
id='id'
dt[.id %in% 'id1', env=list(.id=id)]
#       id
#   <char>
#1:    id1

因为它现在不在 CRAN 上,所以您需要从我们的类似 CRAN 的仓库中安装 data.table。请注意,我们也发布了 Windows 二进制文件,因此 Rtools 不是必需的。 从我们的仓库安装最简单的方法是:

data.table::update.dev.pkg()

关于R data.table 范围,使用变量可靠地引用未知列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67728442/

相关文章:

R:使用数据表聚合数据

r - 如何计算包含字符串的最大值?

r - 使用 ggplot2 制作多个面板图的整洁评估

r - 协方差矩阵和相关矩阵之间的转换

R data.table 按组将特定列设置为最后一个值

r - Double Sapply 嵌套函数

r - 读取 CSV 时自动将 NA 转换为 0

r - 获得与上月底的差额

r - 如何使用 Selenium 单击此按钮

r - 用 R data.table 中的序列填充 NA 值