调用R S3方法和直接从全局环境调用函数有什么区别

问题描述 投票:0回答:0

我创建了一个用于打印对象名称的 S3 方法:

printc = function(...) {
  UseMethod("printc")
}

#' @export add_dataset.data.frame

printc.data.frame = function(...){
  
  xs <- rlang::quos(..., .named = TRUE)
  return(rlang::names2(xs))
}

有两种称呼方式:

b <- printc(iris)

c <- printc.data.frame(iris)

结果b是

<df[,5]>
,而不是c:
iris
,有人知道原因吗?我怎样才能使 S3 方法生成像“iris”这样的结果?

当我试图弄清楚 S3 是如何调度这个方法时,

sloop::s3_dispatch(printc(iris))
,它确实派遣到
printc.data.frame
?我认为这可能与环境有关。

r environment r-s3
© www.soinside.com 2019 - 2024. All rights reserved.