在包之间导出和导入S3方法

时间:2017-03-22 12:54:46

标签: r roxygen2

免责声明:我在撰写此问题时找到了解决此问题的方法。但我现在的问题是"它是如何运作的?"

我正在尝试从一个包中导出S3方法(比如pkg.from)并将其导入另一个包(比如pkg.to)。要导出方法,我使用roxygen2条评论。

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

#' @export
print.myclass <- function(x, ...) {
  print('NULL with class myclass')
}

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

S3method(print,myclass)
export(myclass)

我相信这意味着它们都会被导出。这支持了我可以在加载包后调用它们的事实。

library(pkg.from)
methods(print)
# ...
# [130] print.myclass*
# ...
print(myclass())
# [1] "NULL with class myclass"

问题是当我想使用roxygen2将此方法导入另一个包时。

#' @importFrom pkg.from print.myclass

Build期间出现此消息:

Error : object 'print.myclass' is not exported by 'namespace:pkg.from'
ERROR: lazy loading failed for package 'pkg.to'

如果我没有导入print.myclass,即使我没有加载包pkg.from,它也能正常运行。 Hadley Wickham writes&#34;您不需要为S3方法执行任何特殊操作&#34;。但我不认为导入功能是什么特别的&#34;。现在我在开始写这个问题时遇到了更多问题。

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

0 个答案:

没有答案