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

Cha*_*lie 3 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
Run Code Online (Sandbox Code Playgroud)

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

jan*_*cki 5

最近在 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
Run Code Online (Sandbox Code Playgroud)

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

data.table::update.dev.pkg()
Run Code Online (Sandbox Code Playgroud)