我正在尝试在名为var rx = /^[0-9]{7,10}_(LM|LI|AQ)_[A-Za-z]+$/gm;
console.log("0100455_LM_Izaguirre".match(rx));
console.log("0100455_YM_Izaguirre".match(rx));
console.log("0100455_AQ_Izaguirre".match(rx));
的包中创建一个S3方法。这是R中的原语,但我的包中应该有一个同名的S3。
我有以下文件dimnames
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
我得到以下输出(以及其他消息):
警告:未找到声明的S3方法'dimnames.default'
警告:未找到声明的S3方法'dimnames.list'
加载包并检查其内容,R CMD build rpkg
R CMD check rpkg_1.0.tar.gz
导出dimnames.data.frame
,而dimnames.default
则导出dimnames.list
。这对我来说没有意义。据我了解,我正确地宣布出口。此外,NAMESPACE
文件对我来说很好看:
S3method(dimnames,data.frame)
S3method(dimnames,default)
S3method(dimnames,list)
export(dimnames)
为什么这不起作用,以及如何解决?
(奖励积分:为什么我们在should not be needed与#' title
的情况下在S3实施中需要roxygen=5.0.1
?)
答案 0 :(得分:1)
只有在希望用户能够直接访问它们时才会导出S3方法。如果总是通过泛型调用它们,则无需导出它们。
R CMD check
的问题可能是由于为dimnames
定义了您自己的通用。通常,只需定义方法并利用R中已有的原语泛型。从dimnames
中删除dimnames.r
泛型。
为新类添加方法应该没有问题,但是对于R dimnames
处理自身的现有类,可能会尝试覆盖dimnames
的功能。