对比以下两个代码段:
1)
> y <- 1
> g <- function(x) {
+ y <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(x) y
> g(10)
[1] 2
2)
> x <- 1
> g <- function(x) {
+ x <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(y) x
> g(10)
[1] 1
在第一个片段中,g。数字的自由变量(即“y”)在g的本地环境中进行评估,而在第二个片段中,g.numeric的自由变量(即“x”)在全局环境中进行评估。怎么样?
答案 0 :(得分:7)
正如Writing R Extensions中所述:
方法必须包含泛型的所有参数,包括......如果泛型的参数。
您的第二个示例没有(g(x)
vs g.numeric(y)
)。如果您重新定义g <- function(y)
,则一切都与第一个示例相同。
> x <- 1
> g <- function(y) {
+ x <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(y) x
> g(10)
[1] 2