How do I show the source code of an S4 function in a package?

孤街浪徒 提交于 2019-12-17 17:39:39

问题


I used the packages topGO in R to analyze gene enrichment with the following code:

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)

I want to see and change the RunTest function and the GenTable function to change the ResultTable, but I don't know how to show the function. With the getAnywhere("GenTable") I do not get the hard code I want.

getAnywhere("GenTable")

A single object matching ‘GenTable’ was found

It was found in the following places

package:topGO

namespace:topGO

with value

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"

How can I do this?


回答1:


Use getMethod() and specify the signature. In your case, that could be eg :

getMethod("GenTable","topGOdata")

to show the GenTable method for topGOdata objects. In this case, there is only a method defined for topGOdata objects. In case there are methods with different signatures, showMethods() will tell you which ones. In your case :

showMethods("GenTable")
# Function: GenTable (package topGO)
# object="topGOdata"

You can get the code for the signature you want by specifying it in the getMethod() function.




回答2:


I know this is an old question, but for the sake of completeness for future searchers, there's also a function called

selectMethod

that varies from getMethod in that you can use inheritance. This is how I found source for a generic function that has multiple signatures.




回答3:


Note that as of R version 2.11.0, one needs to use findMehtods(). Here is an extract from the changelog.

getMethods() is now deprecated, with its internal use replaced by findMethods() and other changes. Creating objects from the "MethodsList" class is also deprecated.



来源:https://stackoverflow.com/questions/5937832/how-do-i-show-the-source-code-of-an-s4-function-in-a-package

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!