Как мне показать исходный код функции S4 в пакете? - PullRequest
35 голосов
/ 09 мая 2011

Я использовал пакеты 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"

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

Ответы [ 3 ]

32 голосов
/ 09 мая 2011

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

getMethod("GenTable","topGOdata")

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

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

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

12 голосов
/ 06 апреля 2012

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

selectMethod

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

0 голосов
/ 24 августа 2016

Обратите внимание, что для версии R 2.11.0 необходимо использовать findMehtods().Вот выдержка из журнала изменений.

getMethods() теперь устарела, его внутреннее использование заменено на findMethods() и другие изменения.Создание объектов из класса "MethodsList" также не рекомендуется.

...