首页 > 解决方案 > 在 data.table 中的函数内子集行

问题描述

我正在尝试在 R 函数中以编程方式对 data.table 的行进行子集化。以下按预期工作:

dt <- data.table(id = 1:5, variable = c("test","data","data", "is", "fun"))
dt[variable == "data"]
   id variable
1:  2     data
2:  3     data

如果我定义函数:

dtSubset <- function(df, col, str) {
  df[col == str]
}
dtSubset(df, "variable", "data")

我得到一个 0 行表。

以下作品:

dtSubset <- function(df, str) {
  dt[variable == str]
}
dtSubset(df, "data")

所以问题在于选择函数内的列。

我尝试了 , 和 , 引用和取消引用要传入的列名的组合eval,但substitute都无济于事。我也尝试过,但遇到了同样的问题。小插曲描述了如何做到这一点,但不是在. 不确定我是否遗漏了一些明显的东西,或者我只是想错了,但我应该怎么做呢?quotedeparsesubsetji

标签: rdata.table

解决方案


您还可以使用get来使您的功能正常工作:

dtSubset <- function(df, col, str) {
  df[get(col) == str]
}

现在dtSubset(dt, "variable", "data")将为您提供预期的结果:

   id variable
1:  2     data
2:  3     data

推荐阅读