创建与现有包同名的包函数

Creating package functions with the same name as existing package

作为 dplyr 语法的大力支持者,我创建了一个包,可用于处理 class 在研究(summarizedExperiment,或 se)中经常使用的语法相似的语法。 (包名称清理)。

例如,我定义了一个名为 filter.SummarizedExperiment 的新 filter 函数,它将 se 作为其第一个参数,并将调度函数定义为 filter <- function(se, axis, ...){UseMethod("filter")}.

这按预期工作,但在加载 cleanse 包后,dplyr 等效函数被屏蔽,过滤数据帧不再起作用。

有什么方法可以调整我的包,以便仍然可以使用 dplyr 的原始数据框版本并且调度将自动使用 dplyr 或清理版本,具体取决于它的第一个参数是数据框还是 SummarizedExperiment?最好的方法是什么?

PS1:我知道使用显式命名空间的解决方案,即使用 dplyr::filter,但想要一个基于 class 自动进行分派的解决方案。
PS2: dplyr 是 cleanse 的依赖项,因此所有用户都将安装 dplyr。

dplyr 已经为 filter 定义了泛型,因此只需定义您自己的方法即可。这里我们 return 字符串 sese 对象上调用 filter 时,因此在 filter.se 中适当地替换正文:

library(dplyr)
filter.se <- function(x, ...) "se"
filter.default <- filter.ts <- stats::filter

dplyr 的 filter 破坏了基础 R 的过滤器和上面的最后一行,这是可选的,修复了这个问题但是如果你不使用它那么你将不得不使用 stats::filter 每当你想使用基数 filter.

测试一下:

filter(BOD, Time < 5)
filter(1:5, 3)
filter(structure(1, class = "se"))