包之间导出和导入S3方法

Jan*_*ger 6 r roxygen2

免责声明:我在编写此问题时找到了解决该问题的方法。但是我现在的问题是“它如何工作?”

我正在尝试从一个包(例如pkg.from)导出S3方法并将其导入另一个包(例如pkg.to)。要导出该方法,请使用roxygen2注释。

#' @export
myclass <- function() {
  structure(NULL, class = 'myclass')
}

#' @export
print.myclass <- function(x, ...) {
  print('NULL with class myclass')
}
Run Code Online (Sandbox Code Playgroud)

文件NAMESPACE现在同时包含构造函数和方法。

S3method(print,myclass)
export(myclass)
Run Code Online (Sandbox Code Playgroud)

我相信这意味着它们都是出口的。这支持在装入程序包后可以同时调用这两个事实。

library(pkg.from)
methods(print)
# ...
# [130] print.myclass*
# ...
print(myclass())
# [1] "NULL with class myclass"
Run Code Online (Sandbox Code Playgroud)

问题是当我想将此方法导入到其他包中时roxygen2

#' @importFrom pkg.from print.myclass
Run Code Online (Sandbox Code Playgroud)

Build此消息发生期间:

Error : object 'print.myclass' is not exported by 'namespace:pkg.from'
ERROR: lazy loading failed for package 'pkg.to'
Run Code Online (Sandbox Code Playgroud)

如果我不导入print.myclass,即使我没有pkg.from加载包也可以。Hadley Wickham写道: “您不需要为S3方法做任何特殊的事情”。但是我不认为导入函数“有什么特别的”。现在我有更多的问题,而开始写这个问题的时间比以前多。

  • R在哪里将每个泛型可用的方法存储在哪里?
  • 当他用同一类的方法安装了更多软件包时,如何解决冲突?