如何在包中显示S4功能的源代码?

Lis*_*ann 36 packages r s4

我使用R中的topGO包来分析基因富集,使用以下代码:

sampleGOdata <- new("topGOdata", description = "Simple session", ontology = "BP",
                    allGenes = geneList, geneSel = topDiffGenes, nodeSize = 10, 
                    annot = annFUN.db, affyLib = affyLib)
resultFisher <- runTest(sampleGOdata, algorithm = "classic", statistic = "fisher")
allRes <- GenTable(sampleGOdata, classicFisher = resultFisher, orderBy = "fisher", 
                   ranksOf = "classicFisher",topNodes = 10)
Run Code Online (Sandbox Code Playgroud)

我想看到和更改的RunTest功能和GenTable更改的功能ResultTable,但我不知道如何表达的功能.随着getAnywhere("GenTable")我没有得到我想要的硬代码.

getAnywhere("GenTable")
Run Code Online (Sandbox Code Playgroud)

找到了匹配"GenTable"的单个对象

它在以下地方被发现

package:topGO

namespace:topGO
Run Code Online (Sandbox Code Playgroud)

有价值的

function (object, ...)
standardGeneric("GenTable")
<environment: 0x16a30c10>
attr(,"generic")
[1] "GenTable"
attr(,"generic")attr(,"package")
[1] "topGO"
attr(,"package")
[1] "topGO"
attr(,"group")
list()
attr(,"valueClass")
character(0)
attr(,"signature")
[1] "object"
attr(,"default")
`NULL`
attr(,"skeleton")
function (object, ...)
stop("invalid call in method dispatch to \"GenTable\" (no default method)",
domain = NA)(object, ...)
attr(,"class")
[1] "standardGeneric"
attr(,"class")attr(,"package")
[1] "methods"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Jor*_*eys 33

使用getMethod()并指定签名.在您的情况下,这可能是例如:

getMethod("GenTable","topGOdata")
Run Code Online (Sandbox Code Playgroud)

显示topGOdata对象的GenTable方法.在这种情况下,只有为topGOdata对象定义的方法.如果有不同签名的方法,showMethods()会告诉你哪些签名.在你的情况下:

showMethods("GenTable")
# Function: GenTable (package topGO)
# object="topGOdata"
Run Code Online (Sandbox Code Playgroud)

您可以通过在getMethod()函数中指定签名来获取所需签名的代码.


nsh*_*eff 12

我知道这是一个老问题,但为了未来搜索者的完整性,还有一个叫做的功能

selectMethod
Run Code Online (Sandbox Code Playgroud)

与getMethod不同,您可以使用继承.这就是我找到具有多个签名的泛型函数的源代码的方法.

  • 如果能更完整地演示“selectMethod”的工作原理以及与“getMethod”的区别,我们将不胜感激 (2认同)