R data.table:i中逻辑条件的馈送列表

R data.table:i中逻辑条件的馈送列表,r,data.table,boolean-expression,R,Data.table,Boolean Expression,我必须编写一个长脚本(称为脚本),在data.table上执行各种操作,然后将其应用于不同的行子集几次。我希望能够做到以下几点: condition <- "X>10" source(Script) dt[MAGIC(condition), .......] 这将允许我将脚本和条件保存在不同的文件中(第二个文件是一个只显示结果的标记,我希望在代码方面尽可能简单) 我不想复制粘贴每个条件的脚本,并手动更改它,因为这太容易出错 我尝试了很多组合,包括解析、解包、替换、引用、as.ex

我必须编写一个长脚本(称为脚本),在data.table上执行各种操作,然后将其应用于不同的行子集几次。我希望能够做到以下几点:

condition <- "X>10"
source(Script)
dt[MAGIC(condition), .......]
这将允许我将脚本和条件保存在不同的文件中(第二个文件是一个只显示结果的标记,我希望在代码方面尽可能简单)

我不想复制粘贴每个条件的脚本,并手动更改它,因为这太容易出错

我尝试了很多组合,包括解析、解包、替换、引用、as.expression、as.logical等,但我似乎在黑暗中蹒跚而行。如果有人能帮助我,我将非常感激

注意:我可以在dplyr中轻松完成上述操作:

df %>% filter_(condition)
当然,我也可以将其转换回data.table

df %>% filter_(condition) %>% data.table()
。。。但是我更愿意使用data.table(更快,更喜欢语法等)

我们使用
eval(parse

setdT(dt)[eval(parse(text=condition))]

您可以使用
dt[eval(parse(text=condition))]
Thank You@akrun!!或者像
cond=quote(X>10)
那样编写您的条件,然后执行
dt[eval(cond)]
--这实际上在代码方面更简单,因为条件被存储为有效的语言对象,并且计算它所需的代码更少。
quote
如果传递不可解析的内容,也会很方便地失败,比如
quote(x^:)
不同的是,x^:
。还有一个小提示:
filter\u
正在被一些其他语法淘汰……如果你想要一个链,有
DT%>%`[`(i=eval(e))
,这是我有时用magrittr做的。