我想在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的表达式。
所以我认为,它应该与表达式一起使用。我怎么了还是有一种方法可以“取消报价”?
答案 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 在函数环境中而不是在调用函数的上下文中评估参数。