免责声明:我在撰写此问题时找到了解决此问题的方法。但我现在的问题是"它是如何运作的?"
我正在尝试从一个包中导出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;。现在我在开始写这个问题时遇到了更多问题。