S3 通用方法未出现在包手册中

S3 generic method not appearing in package manual

在我的 R 包中,包手册 .pdf 文件中省略了一些函数 - 它们都是 S3 方法,其中几个函数一起记录。所有其他 "normal" 函数都正确显示,所以我怀疑我没有正确记录 S3 方法。

我希望 myfun 的条目出现在手册中。现在,.pdf 手册中完全没有该函数,但它仍然可以被正确调用并且它的帮助页面被引用 ?myfun。我的 Roxygen2 关键字有误吗?

#' @export
myfun <- function(...) UseMethod("myfun")

#' @inheritParams myfun
#' @describeIn myfun Create a frequency table from a vector.
#' @export
#' @keywords internal

myfun.default <- function(vec, sort = FALSE, show_na = TRUE, ...) {
...
}

#' @inheritParams myfun.default
#' @describeIn myfun Create a frequency table from a data.frame,
#' supplying the unquoted name of the column to tabulate.
#' @export
#' @keywords internal
tabyl.data.frame <- function(.data, ...){
...
}

(我省略了 @title, @description, @param, @return, @examples 行以使这个问题更短,但如果相关可以编辑它们)。

通用方法按预期导出,因此用户只能看到 myfun() 而看不到 myfun.default()myfun.data.frame(),除非他们使用三个冒号 :::。我想保留这种行为,所以用户只需调用 myfun,同时在包手册中也有一个条目 myfun

我删除了两个 myfun. 方法中的 @keywords internal 并且做到了:myfun 出现在包的手册中。我还切换到 @rdname myfun 而不是 @describeIn myfun,以删除函数文档中的 "Methods (by class):" 部分。

很难隔离的原因是,如果我 运行 devtools::document() 然后不重新启动会话,方法 myfun.data.framemyfun.default 在RStudio 的自动完成功能,可以直接调用。它们不应该被用户访问,我认为我的 Roxygen2 文档是罪魁祸首。

事实上,我所要做的就是删除 @keywords internal

方法 myfun.data.framemyfun.default do 在键入 ? 后出现在自动完成中,例如 ?myfun.default,但是我认为没有办法解决这个问题(无论如何,它都指向所有三个 myfun 函数的单个帮助页面)。这是标准的。例如,?print.aov是可见的帮助文件,而print.aov()不能直接调用。