【发布时间】:2018-07-05 10:04:21
【问题描述】:
我有一个关于将变量传递到 data.table 以过滤行的问题。 我在 data.table 中过滤器列的名称可以更改的函数中使用它。
我了解只要参数名称与 data.table 列名称不同,它将如何工作。 但是,参数名称与 data.table 列名称相同的可能性很小。如果发生这种情况,我的代码就会中断。如果发生任何一种情况,有没有办法确保我的代码永远不会中断?
# Example:
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
DT2 = data.table(x2=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
# This works
x <- "x2"
DT2[get(x) == "b"]
DT2[DT2[[x]] == "b"]
# This doesn't work
x <- "x"
DT[get(x) == "b"]
DT[DT[[x]] == "b"]
# I can get x="x" to work if I use eval, but then it would break if x!="x"
x <- "x"
DT[eval(x) == "b"] # Works
x <- "x2"
DT2[eval(x) == "b"] # Doesn't work
感谢任何帮助。 谢谢
【问题讨论】:
-
DT[.("b"), on=x, nomatch=0] -
太棒了。这行得通。
标签: r variables filter data.table subset