Quero criar uma função simples em R que funcione com data.frames/tibbles ou com data.table. Então, criei um novo método:
pesquisarComposicao <- function(BASE, ...) {
UseMethod("pesquisarComposicao")
}
Então criei o método para data.frames, que demonstra uma função de busca bem simples. Funciona muito bem.
pesquisarComposicao.data.frame <- function(BASE, TERMO, CAMPO = DESCRICAO) {`
BASE |>
filter(grepl(pattern = {{TERMO}}, x = {{CAMPO}}))
}
Mas o método data.table abaixo não está funcionando (eu estava seguindo as instruções aqui ):
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]
}
Tentei inserir filter_col = NULL
e filter_val = NULL
para evitar o seguinte erro:
Error in pesquisarComposicao.data.table(BASE = sinteticoSINAPI, TERMO = "PEITORIL") : object 'filter_col' not found
Mas então obtive outro erro:
Error in grepl(pattern, vector, ignore.case = ignore.case, fixed = fixed, : invalid 'pattern' argument
Acho estranho, porque quando eu ainda não usava métodos, mas programei uma função que deveria funcionar para data.tables e data.frames simples (verificando internamente se o objeto era de um tipo ou outro), este trecho de código acima funcionava bem (e eu não precisava do filter_col = NULL
and filter_val = NULL
). Por que funcionou para uma única função, mas não funcionou como um método?
Eu penso
faz o que você procura.
Dados de amostra
já que o OP não fornece alguns.