【发布时间】:2018-04-08 12:51:10
【问题描述】:
我正在使用 devtools::document() 开发一个 R 包来创建 NAMESPACE 文件。其中几个函数是用于汇总、预测、绘图、打印的 S3 方法,其中泛型位于 base 或 stats 中。
我正在按照 Hadley 的建议使用 @export,这会导致 NAMESPACE 中的 S3method 条目正确,并且包通过了所有检查 -as-cran。但是,函数不会在 NAMESPACE 中导出,因此找不到调用 print.myclass(我知道这是避免混淆 NAMESPACE 的理想行为)。但是,通过 Mypackage::print.myclass 调用该函数也会导致该函数不是从Mypackage 导出的对象的错误。
问题:这是正确的行为吗?或者是否需要其他步骤才能导出功能?我尝试同时添加@method print Myclass 和@export,但没有成功。在 MAC OS X 10.12.6 下使用 R 3.4.2 和 devtools 1.13.3
谢谢!梅丽丝
已编辑:更新为添加/导出方法和导出函数的代码
简单示例 - 在 RStudio 中构建具有功能的骨架包:
#' test for export of S3 methods
#'
#' @title "print hello world for any object"
#' @param x object
#' @param digits optional number specifying the number of digits to display
#' @param ... other parameters to be passed to \code{print.default}
#' @export print.hello
#' @export
print.hello = function (x, digits = max(3, getOption("digits") - 3), ...)
{
cat("\n Hello World \n")
invisible()
}
命名空间现在有
# Generated by roxygen2: do not edit by hand
S3method(print,hello)
export(print.hello)
使用不带参数的@export 会导出方法,而@export print.hello 会导出函数,但不会将方法添加到NAMESPACE(这会导致包检查出错)。两者都允许导出方法和函数。
【问题讨论】:
-
问题:这是正确的行为吗?我认为这是正确的行为。
标签: r namespaces devtools