【发布时间】:2018-06-01 16:22:22
【问题描述】:
我可以列出所有包含“auc”功能的包:
library(sos)
library(dplyr)
auc.search = findFn("auc")
auc.search %>%
filter(Function == "auc", Package != "pROC") %>%
select(Package, Function, Description) %>% head
Package Function Description
1 longROC auc AUC
2 AUC auc Compute the area under the curve of a given performance...
3 PK auc Estimation of confidence intervals for the area under the...
4 PresenceAbsence auc Area Under the Curve
5 aucm auc AUC
6 precrec auc Retrieve a data frame of AUC scores
现在我想测试这些包中的函数是否是通用函数。我该怎么做?
例如,我想要这样的东西:
library(AUC)
is.generic(AUC::auc)
FALSE
library(pROC)
is.generic(pROC::auc)
TRUE
关于我这样做的原因的一些背景知识:当我加载任何这些包时,我在搜索路径上的包中的 auc 函数将被新附加包中的函数所掩盖。如果加载的函数是泛型的,这不是问题(除非类名冲突,但这是另一个问题)。但是,如果函数不是泛型的,加载包将是一个问题,我想检测一下。
【问题讨论】:
-
好吧,
isGeneric内置在methods包中,但我似乎无法让它工作...... -
@Gregor 我相信它只适用于 S4 方法,就像方法包中的所有内容一样,令人困惑。这个包的标题是“Formal Methods and Classes”,也就是S4。
-
啊,但一个愉快的自动完成意外将我指向
utils::isS3stdGeneric,这似乎是您所追求的(或至少非常接近)。 -
@Gregor 谢谢这很有用。我写了一个有效的答案,但我很乐意接受一个不会弄乱搜索空间的答案。
标签: r generics methods package