Data.table:将引号或表达式用作i

时间:2019-01-11 09:01:57

标签: r data.table expression quote

我想在data.table中用作i的引号(或表达式)。但这似乎是不可能的。

这是一个最小的示例:

library(data.table)

dt <- data.table(a = 1:10)

dt[a == 5,]             # Everything well
dt[quote(a == 5),]      # Error: i has not evaluated to logical, integer or double
dt[expression(a == 5),] # Error: i has not evaluated to logical, integer or double

i的data.table状态帮助页面:

  

整数,逻辑或字符向量,单列数字矩阵,列名,列表,data.frame或data.table的表达式。

所以我认为,它应该与表达式一起使用。我怎么了还是有一种方法可以“取消报价”?

1 个答案:

答案 0 :(得分:0)

出于完整性考虑,以下是在问题下方以评论形式发布的@nicola的答案:

表达式或引号应通过eval()括起来。对于问题中的示例,它看起来像:

library(data.table)

dt <- data.table(a = 1:10)

dt[a == 5,]             # Everything well
dt[eval(quote(a == 5)),]      # Now, it works
dt[eval(expression(a == 5)),] # Now, it works

秘密似乎是 R 在函数环境中而不是在调用函数的上下文中评估参数。