我有以下背景:
我确实超载cor
基本函数,以便我在我的包 .R 文件中包含以下语句:
#'export
setGeneric("cor")
现在我想为我的对象创建一个特定的函数(名为stranger
) -- 这里为了简单起见,我只认为我的对象是一个 data.table ,其中有一个名为.id
.
#' Correlation for stranger objects
#' describeIn cor Correlation method for stranger objects.
setMethod("cor",signature(x="stranger"),function(x, method = c("pearson", "kendall", "spearman")){
selectMethod("cor","ANY")(x[,-'.id',with=FALSE],y=NULL, use="everything",method=method)
})
如果我明白的话setGeneric
,它依赖于 S4 类——因此signature
范围。
但是,我不使用 S4 类,而是构建我的stranger
用简单的旧方法对象:
buildClass <- function(x,...){
#... prepare out object as data.table with .ìd column
class(out) <- c("stranger", class(out))
return(out)
}
也就是说,我的对象没有 S4 类。
调度仍然有效:调用cor
在我的对象上正确应用专用方法。
我的问题是如何使用 ROxygen2 正确记录这一点。目前,在加载我的函数时,我遇到以下消息:
Updating stranger documentation
Loading stranger
Creating a generic function for 'cor' from package 'stats' in package 'stranger'
in method for 'cor' with signature 'x="stranger"': no definition for class "stranger"
我已经仔细阅读了 roxygen2 上的 Hadley vignette 以及一些似乎与 stackoverflow 相关的问题,但它们只处理经典的 S3 机制或纯 S4,而我没有 S4 构造函数setClass
and setGeneric
依赖S4。