我想在 R 中创建一个简单的函数,可以处理 data.frames/tibbles 或 data.table。所以我创建了一个新方法:
pesquisarComposicao <- function(BASE, ...) {
UseMethod("pesquisarComposicao")
}
然后我创建了 data.frames 的方法,它展示了一个非常简单的搜索功能。效果非常好。
pesquisarComposicao.data.frame <- function(BASE, TERMO, CAMPO = DESCRICAO) {`
BASE |>
filter(grepl(pattern = {{TERMO}}, x = {{CAMPO}}))
}
但是下面的 data.table 方法不起作用(我按照此处的说明进行操作):
pesquisarComposicao.data.table <- function(BASE, TERMO,
CAMPO = "DESCRICAO DA COMPOSICAO") {
# filter_col <- NULL
# filter_val <- NULL
BASE[filter_col %like% filter_val,
env = list(
filter_col = CAMPO,
filter_val = I(TERMO)
), verbose = FALSE]
}
我已尝试插入filter_col = NULL
并filter_val = NULL
以避免出现以下错误:
Error in pesquisarComposicao.data.table(BASE = sinteticoSINAPI, TERMO = "PEITORIL") : object 'filter_col' not found
但后来我又收到另一个错误:
Error in grepl(pattern, vector, ignore.case = ignore.case, fixed = fixed, : invalid 'pattern' argument
我觉得很奇怪,因为当我还没有使用方法,而是编写了一个应该适用于 data.tables 和简单 data.frames 的函数(内部会验证对象是否属于某一种类型)时,上面这段代码运行正常(而且我不需要 and filter_col = NULL
)filter_val = NULL
。为什么它作为单个函数有效,但作为方法却不行呢?
我认为
做你想要做的事。
示例数据
因为 OP 没有提供一些。