我正在尝试在我的包中创建一个名为的 S3 方法dimnames
。这是R中的原语,但我的包中应该有一个同名的S3。
我有以下文件dimnames.r
#' S3 overwriting primitive
#'
#' @param x object
#' @export
dimnames = function(x) {
UseMethod("dimnames")
}
#' title
#'
#' @export
dimnames.data.frame = function(x) {
dimnames.default(x)
}
#' title
#'
#' @export
dimnames.list = function(x) {
lapply(x, dimnames)
}
#' title
#'
#' @export
dimnames.default = function(x) {
message("in S3 method")
base::dimnames(x)
}
然后我从中创建一个包(在R=3.3.2
):
> package.skeleton("rpkg", code_files="dimnames.r")
> setwd("rpkg")
> devtools::document() # version 1.12.0
然后检查包裹
R CMD build rpkg
R CMD check rpkg_1.0.tar.gz
我得到以下输出(以及其他消息):
警告:未找到声明的 S3 方法“dimnames.default”
警告:未找到声明的 S3 方法“dimnames.list”
装载包裹并检查其内容,dimnames.data.frame
被导出时dimnames.default
and dimnames.list
不是。这对我来说没有意义。据我了解,我正确申报了出口。另外,NAMESPACE
文件对我来说看起来不错:
S3method(dimnames,data.frame)
S3method(dimnames,default)
S3method(dimnames,list)
export(dimnames)
为什么这不起作用,以及如何解决它?
(奖励积分:为什么我需要#' title
在 S3 实现中,当它们不应该需要 https://stackoverflow.com/a/22598266/538603 with roxygen=5.0.1
?)