Ken*_*ams 5 indexing r data.table
我有一个data.table像这样的结构(除了我真的很大):
dt <- data.table(x=1:5, y=3:7, key='x')
Run Code Online (Sandbox Code Playgroud)
我想在另一个名称为的变量中查找该结构中的行x(注意 - 与键的名称相同dt):
x <- 3:4
dt2 <- dt[ J(x) ]
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为查找首先查看列名,并且局部变量被遮挡:
dt2
# x y
# 1: 1 3
# 2: 2 4
# 3: 3 5
# 4: 4 6
# 5: 5 7
Run Code Online (Sandbox Code Playgroud)
我考虑过这个with论点[.data.table,但这只适用于j论证,而不是i论证.
这个i论点有类似的东西吗?
如果没有,只要我使用局部变量并且我不知道列名的完整列表,这样的事情会很方便dt,以避免冲突.
mne*_*nel 11
新闻1.8.2中有一个项目建议..()在某个时刻添加语法,允许这样做
新的DT [.(...)]语法(采用包plyr的方式)与DT [list(...)],DT [J(...)]和DT [data.table(.. .)].我们计划添加..(),以便.()和..()类似于文件系统的./和../; ie.()在DT的框架内评估,在父范围内评估..().
同时,您可以get从适当的环境中获取
dt[J(get('x', envir = parent.frame(3)))]
## x y
## 1: 3 5
## 2: 4 6
Run Code Online (Sandbox Code Playgroud)
或者你可以eval打电话给list(x)或J(x)
dt[eval(list(x))]
dt[eval(J(x))]
dt[eval(.(x))]
Run Code Online (Sandbox Code Playgroud)