我试图将我的头放在 quasiquotation 上,以便我可以将它与 data.table
调用一起使用。下面是一个例子:
library(data.table)
library(rlang)
dt <- data.table(col1 = 1:10, col2 = 11:20)
dt[, col1]
如果我想把它包装成函数,我该怎么做?我试过了:
foo <- function(dt, col) {
col <- quo(col)
expr(dt[, !!col1])
}
foo(dt, col1)
但是得到
Error in enexpr(expr) : object 'col1' not found
。我假设我遗漏了一些步骤,因为 data.table
对此的评估与 dplyr
不同。 最佳答案
您想将列名捕获为符号
col <- ensym(col)
而不是
quo()
然后使用expr(dt[, !!col])
(不是那里不存在的
col1
)但这只会返回一个表达式。如果你想评估它,你需要eval_tidy(expr(dt[, !!col]))
但实际上,quasinotation 的东西在 tidyverse 中效果最好,而不是原生的 data.table 函数。 “data.table”方式可能更像是这个现有问题中的东西: Pass column name in data.table using variable 。 data.table 非常喜欢字符串而不是符号。
关于r - 使用 data.table 进行准报价,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58489287/