Estou trabalhando com R e criei um novo subset
método para objetos da classe new_object
. Aqui está minha função:
setGeneric('subset', function(x, i) standardGeneric('subset'))
setMethod('subset', 'new_object', function(x, i) {
# ... my code ...
# subset new_object
})
Isso funciona perfeitamente para new_object
. No entanto, parece interferir na operação de subconjuntos de outros objetos, como seurat
objetos. Recebo um erro quando tento criar um subconjunto de um objeto seurat depois de carregar meu novo método de subconjunto.
The inheritance method for the 'subset' function with the 'Seurat' tag could not be found.
Gostaria que o método de subconjunto funcionasse normalmente para todos os outros tipos de objetos, exceto para new_object
, para os quais desejo usar meu novo método de subconjunto.
Como posso definir um novo método de subconjunto para uma classe específica sem afetar outros objetos em R?
Em um R limpo e recém-aberto, execute
subset
sem as chaves para ver o que é esse objetoPortanto, esta é uma função genérica do S3 com argumentos
x
e...
reside em packagebase
. Assim, ao chamarsetGeneric('subset', function(x, i) standardGeneric('subset'))
, você cria uma nova função genérica com argumentosx
,i
que é diferente dos argumentos existentesx
,...
definidossubset
em packagebase
.A solução é chamar
setGeneric("subset")
para fazer com que a função existente (subset
no pacotebase
) se torne uma função genérica S4.Como você pode ver em
showMethods("subset", includeDefs = TRUE)
, quando você chama esse S4subset
comx
classenew_object
, ele será despachado para seus métodos personalizados. Chamando com qualquer outra classe, utilizará o mecanismo de despacho S3 existente (ou seja,UseMethod
).