我试图弄清楚R如何UseMethod
找到一个方法,一旦它弄清楚它在寻找什么(即用MyClass类的x调用的函数MyGeneric(x):MyGeneric.MyClass)具体来说,涉及哪些环境?
我已阅读 R 语言手册的“5.3 Method Dispatching”和“5.4 UseMethod”部分,其中没有指定搜索机制。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
将在调用环境中。我错过了什么?