在 R 包中使用 S3 覆盖原语时出现导出错误
Export error on overwriting primitives with S3 in R package
我正在尝试在我的包中创建一个名为 dimnames
的 S3 方法。这是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
我得到以下输出(以及其他消息):
Warning: declared S3 method 'dimnames.default' not found
Warning: declared S3 method 'dimnames.list' not found
加载包并检查其内容,dimnames.data.frame
已导出,而 dimnames.default
和 dimnames.list
未导出。这对我来说没有意义。据我了解,我正确地申报了出口。此外,NAMESPACE
文件对我来说看起来不错:
S3method(dimnames,data.frame)
S3method(dimnames,default)
S3method(dimnames,list)
export(dimnames)
为什么这不起作用,如何解决?
(奖励积分:为什么我在 S3 实现中需要 #' title
,而它们 should not be needed 和 roxygen=5.0.1
?)
S3 方法仅在希望用户能够直接访问它们时才导出。如果总是通过泛型调用它们,则无需导出它们。
R CMD check
的问题可能是由于为 dimnames
定义了您自己的泛型。通常只定义方法并利用 R 中已有的原始泛型。从 dimnames.r
.
中删除 dimnames
泛型
为新的 类 添加方法应该没有问题,但您可能会在尝试为 R 的 dimnames
的现有 类 覆盖 dimnames
的功能时遇到问题自行处理。
我正在尝试在我的包中创建一个名为 dimnames
的 S3 方法。这是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
我得到以下输出(以及其他消息):
Warning: declared S3 method 'dimnames.default' not found
Warning: declared S3 method 'dimnames.list' not found
加载包并检查其内容,dimnames.data.frame
已导出,而 dimnames.default
和 dimnames.list
未导出。这对我来说没有意义。据我了解,我正确地申报了出口。此外,NAMESPACE
文件对我来说看起来不错:
S3method(dimnames,data.frame)
S3method(dimnames,default)
S3method(dimnames,list)
export(dimnames)
为什么这不起作用,如何解决?
(奖励积分:为什么我在 S3 实现中需要 #' title
,而它们 should not be needed 和 roxygen=5.0.1
?)
S3 方法仅在希望用户能够直接访问它们时才导出。如果总是通过泛型调用它们,则无需导出它们。
R CMD check
的问题可能是由于为 dimnames
定义了您自己的泛型。通常只定义方法并利用 R 中已有的原始泛型。从 dimnames.r
.
dimnames
泛型
为新的 类 添加方法应该没有问题,但您可能会在尝试为 R 的 dimnames
的现有 类 覆盖 dimnames
的功能时遇到问题自行处理。