subset
我正在使用 R 并为 class 的对象创建了一种新方法new_object
。这是我的功能:
setGeneric('subset', function(x, i) standardGeneric('subset'))
setMethod('subset', 'new_object', function(x, i) {
# ... my code ...
# subset new_object
})
这非常适合new_object
. 但是,它似乎会干扰其他对象(例如seurat
对象)的子集操作。当我在加载新的子集方法后尝试对 seurat 对象进行子集化时,出现错误。
The inheritance method for the 'subset' function with the 'Seurat' tag could not be found.
我希望子集方法像往常一样适用于所有其他类型的对象,除了new_object
,我想使用我的新子集方法。
如何为特定类定义新的子集方法而不影响 R 中的其他对象?
在一个干净的、新打开的 R 中,运行
subset
不带大括号的命令来查看该对象是什么所以这是一个带参数的 S3 通用函数
x
,...
位于 package 中base
。因此,当您调用时setGeneric('subset', function(x, i) standardGeneric('subset'))
,您将创建一个带有参数的新x
泛型函数,该函数与包中定义的现有参数i
不同。 解决方案是调用使现有函数(在包中)成为S4通用函数。x
...
subset
base
setGeneric("subset")
subset
base
正如您从 中看到的,当您使用of class
showMethods("subset", includeDefs = TRUE)
调用此 S4 时,它将分派到您的自定义方法。调用任何其他类,它将利用现有的 S3 调度机制(即)。subset
x
new_object
UseMethod