首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:如何确定函数是否是覆盖泛型的S3方法

R:如何确定函数是否是覆盖泛型的S3方法
EN

Stack Overflow用户
提问于 2022-07-10 11:04:24
回答 1查看 50关注 0票数 2

我想确定一个任意函数是否是一个覆盖泛型函数的S3方法。如果是这样的话,我想将泛型标识为下一步。

问题

我需要类似HasGeneric(AMethod)的东西来告诉我,我的论点AMethod是否是一个覆盖某些泛型的方法。或者更好的FindGeneric(AMethod),它返回AMethod的相应泛型。

我的第一个想法是解析函数名,因为推荐使用模式"generic.class“来命名方法。示例:

  • print是generic.
  • print.aov重写S3类aov.

print

但是字符串解析并非没有歧义:all.equal.data.frame (在dplyr包中)。

此外,这种模式甚至不再是强制性的。看看这个:

代码语言:javascript
运行
复制
a <- 1:5
class(a) <- "SomeTestClassOfMineNotToBeConfused"

# Register some arbitrarily named method as override for print
thisismyaprinter <- function(x) cat("I am A okay")
.S3method("print", "SomeTestClassOfMineNotToBeConfused", thisismyaprinter) # register as override for `print`

methods(class = "SomeTestClassOfMineNotToBeConfused") # now `print` is in the list of methods
#> [1] coerce      initialize  print       show        slotsFromS3
#> see '?methods' for accessing help and source code

print(a) # test works, too
#> I am A okay

众所周知,简单向量1:5的输出是:

代码语言:javascript
运行
复制
print(a <- 1:5)
#> [1] 1 2 3 4 5

试用解决方案

我发现的用于研究方法的所有函数都假设我知道泛型或类的名称(但我不知道)。我可以(当然)

使用.knownS3Generics.

  • Get查看所有可用的泛型,它们的方法使用methods()

  • And搜索它们,并使用我的函数名.

这不仅是缓慢的。甚至都不起作用。当我在上面的示例中查找print的方法时,我得到了以下内容:

代码语言:javascript
运行
复制
methods(print)
#> [201] ...
#> [202] print.SomeTestClassOfMineNotToBeConfused*           
#> [203] ...

R确实用"generic.class“名称模式注册了该方法。但这是不可能的:

代码语言:javascript
运行
复制
print.SomeTestClassOfMineNotToBeConfused(a)
#> Error in print.SomeTestClassOfMineNotToBeConfused(a): konnte Funktion "print.SomeTestClassOfMineNotToBeConfused" nicht finden

..。这意味着R找不到函数print.SomeTestClassOfMineNotToBeConfused

EN

回答 1

Stack Overflow用户

发布于 2022-07-10 11:57:59

您可以使用getDispatchMethodS3 form R.methodsS3

代码语言:javascript
运行
复制
R.methodsS3::getDispatchMethodS3("print" ,
            "SomeTestClassOfMineNotToBeConfused")(a)

#> I am A okay
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72928003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档