【问题标题】:Data.table: Using quotes or expressions as iData.table:使用引号或表达式作为 i
【发布时间】:2019-01-11 09:01:56
【问题描述】:

我想在 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。

所以我认为,它应该适用于表达式。我的错误是什么?或者有没有办法“取消引用”报价?

【问题讨论】:

  • 为什么要在方括号内使用引号?
  • 引号作为函数的参数,应该传递给data.table。该函数本身会处理引用并添加一些其他术语。
  • 你能提供一个更完整的例子来说明你想要实现的目标吗?
  • eval() 括起来expression。例如:dt[eval(expression(a == 5)),].
  • 如此简单。我以为我以前尝试过,但结果向我展示了不同。非常感谢@nicola

标签: r data.table expression quote


【解决方案1】:

为了完整起见,以下是@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 在函数的环境中而不是在调用函数的上下文中评估参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多