web-dev-qa-db-fra.com

Comment afficher le code source d'une fonction S4 dans un package?

J'ai utilisé les paquets topGO in R pour analyser l'enrichissement en gènes avec le code suivant:

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)

Je veux voir et changer la fonction RunTest et la fonction GenTable pour changer le ResultTable, mais je ne sais pas comment afficher la fonction. Avec la getAnywhere("GenTable") je ne reçois pas le code dur que je veux.

getAnywhere("GenTable")

Un seul objet correspondant à ‘GenTable’ a été trouvé

Il a été trouvé dans les endroits suivants

package:topGO

namespace:topGO

avec valeur

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"

Comment puis-je faire ceci?

34
Lisann

Utilisez getMethod() et spécifiez la signature. Dans votre cas, cela pourrait être par exemple:

getMethod("GenTable","topGOdata")

pour afficher la méthode GenTable pour les objets topGOdata. Dans ce cas, il n'y a qu'une méthode définie pour les objets topGOdata. S'il existe des méthodes avec des signatures différentes, showMethods() vous indiquera lesquelles. Dans ton cas :

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

Vous pouvez obtenir le code de la signature souhaitée en le spécifiant dans la fonction getMethod().

31
Joris Meys

Je sais que c’est une vieille question, mais par souci d’exhaustivité pour les futurs chercheurs, il existe également une fonction appelée

selectMethod

cela varie de getMethod en ce que vous pouvez utiliser l'héritage. Voici comment j'ai trouvé le source d'une fonction générique comportant plusieurs signatures.

12
nsheff

Notez qu'à partir de la version R 2.11.0, il faut utiliser findMehtods(). Voici un extrait du changelog.

getMethods() est maintenant obsolète, son utilisation interne est remplacée par findMethods() et d’autres modifications. La création d'objets à partir de la classe "MethodsList" est également déconseillée.

0
Charles Plessy