Как мне показать исходный код функции S4 в пакете?

#r #packages #s4

#r #пакет #r-s4

Вопрос:

Я использовал пакеты topGO в R для анализа обогащения генов с помощью следующего кода:

 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)
  

Я хочу увидеть и изменить RunTest функцию и GenTable функцию для изменения ResultTable , но я не знаю, как показать функцию. С getAnywhere("GenTable") я не получаю жесткий код, который я хочу.

 getAnywhere("GenTable")
  

Был найден единственный объект, соответствующий ‘GenTable’

Он был найден в следующих местах

 package:topGO

namespace:topGO
  

со значением

 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"
  

Как я могу это сделать?

Ответ №1:

Используйте getMethod() и укажите подпись. В вашем случае это может быть, например :

 getMethod("GenTable","topGOdata")
  

чтобы показать настраиваемый метод для объектов topGOdata. В этом случае существует только метод, определенный для объектов topGOdata. В случае, если существуют методы с разными сигнатурами, showMethods() мы сообщим вам, какие из них. В вашем случае :

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

Вы можете получить код для нужной подписи, указав его в getMethod() функции.

Комментарии:

1. В случае, если функция (метод), которую вы ищете, является невидимой функцией, которую вам нужно использовать getAnywhere() . Например, я хочу найти исходный код метода, связанного с функцией summary() для пространственной пробит-модели. Затем methods(summary) показывает мне все методы, связанные с кратким описанием функции. Метод summary.ProbitSpatial является невидимым методом. Затем getAnywhere(summary.ProbitSpatial) приводится исходный код. adv-r.had.co.nz/S3.html

Ответ №2:

Я знаю, что это старый вопрос, но для полноты картины для будущих поисковиков, есть также функция, называемая

 selectMethod
  

это отличается от GetMethod тем, что вы можете использовать наследование. Вот как я нашел исходный код для универсальной функции, которая имеет несколько подписей.

Комментарии:

1. была бы признательна за более полную демонстрацию того, как selectMethod работает и отличается от getMethod