Я пытаюсь выяснить, как R UseMethod
находит метод, как только он выясняет, что его ищет (т.е. функция MyGeneric (x), вызванная с x класса MyClass: MyGeneric.MyClass) В частности, в каких средах?Путаница о методе поиска UseMethod
Я прочитал раздел «5.3 Метод диспетчеризации» и «5.4 UseMethod» руководства R Language Manual, который не определяет механизм поиска. Страница R-Help для UseMethod
дает подсказку:
...UseMethod and NextMethod search for methods in two places:
first in the environment in which the generic function is called,
and then in the registration data base for the environment
in which the generic is defined (typically a namespace)
Но это не добавляет (в моей голове =). Вот конкретный пример:
library(xts)
as.matrix # shows UseMethod("as.matrix")
methods("as.matrix") # shows as.matrix.xts. * indicates non-visible
showMethods("as.matrix") # says <not an S4 generic function>
data(sample_matrix)
as.matrix(as.xts(sample_matrix)) # how does R find as.matrix.xts?? its not exported!
as.matrix
определяется в namespace:base
. Если R должен был использовать эту среду или вызывающую среду (R_GlobalEnv), он не смог найти as.matrix.xts
, потому что ее не экспортировали. Вызывающая среда, похоже, работает, если функция внутри xts вызывает as.matrix
, потому что as.matrix.xts
будет в вызывающей среде. Что мне не хватает?
Это может быть полезным, а также (как к непосредственному вопросу и в целом понимание того, что часть руководства по языку R): http://obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/ – mweylandt
mweylandt - достаточно смешно, это мой пост в блоге =) Кажется, мне нужно добавить раздел о родовых функции/методы, которые отличаются от обычного механизма поиска/поиска. Его немного расстраивает то, насколько сложный этот материал находится в R. – SFun28
Это маленький мир, я полагаю ;-) Я оставлю его для всех, кто спотыкается об этом, если вы не возражаете. – mweylandt