如何为新 S3 class 导出新的通用函数?
How to export new generic function for new S3 class?
我定义了一个新函数 work_with_myS3
应该可以与我的新 S3 一起使用 class myS3
:
work_with_myS3 = function (x) {
UseMethod("work_with_myS3", x)
}
work_with_myS3.myS3 = function(x) {
some code
}
当我在正常的 R 会话(我使用的是 RStudio)中获取它时,它的行为完全符合预期。当我给它一个 myS3
对象时,它起作用了;当我给它喂一些奇怪的东西时,它会抛出一个错误:
> work_with_myS3(123)
Error in UseMethod("work_with_myS3", x) :
no applicable method for 'work_with_myS3' applied to an object of class "c('double', 'numeric')"
但是,当我将它包含在我的包中时,构建它,重新加载它并尝试调用它:
Error: could not find function "work_with_myS3"
帮助页面工作正常,调用 ?work_with_myS3
。这就是我通过 devtools::document()
:
记录它的方式
#' Do stuff with myS3
#'
#' What it does
#' @import dplyr
#' @param x object of class myS3
#' @method work_with_myS3 myS3
#' @export
命名空间中还有一个条目:
S3method(work_with_myS3,myS3)
为什么会这样,如何使该功能在包中可用?我怀疑我犯了一些小错误。
当您使用对象 class myS3
调用 work_with_myS3
时,UseMethod
函数会查找:
work_with_myS3.myS3
或
work_with_myS3.default
因此您需要导出 work_with_myS3.myS3
,所以
#' @export
work_with_myS3.myS3 = function(x) {
## do stuff
}
或者,您可以定义一个 default
方法并将其导出。
我定义了一个新函数 work_with_myS3
应该可以与我的新 S3 一起使用 class myS3
:
work_with_myS3 = function (x) {
UseMethod("work_with_myS3", x)
}
work_with_myS3.myS3 = function(x) {
some code
}
当我在正常的 R 会话(我使用的是 RStudio)中获取它时,它的行为完全符合预期。当我给它一个 myS3
对象时,它起作用了;当我给它喂一些奇怪的东西时,它会抛出一个错误:
> work_with_myS3(123)
Error in UseMethod("work_with_myS3", x) :
no applicable method for 'work_with_myS3' applied to an object of class "c('double', 'numeric')"
但是,当我将它包含在我的包中时,构建它,重新加载它并尝试调用它:
Error: could not find function "work_with_myS3"
帮助页面工作正常,调用 ?work_with_myS3
。这就是我通过 devtools::document()
:
#' Do stuff with myS3
#'
#' What it does
#' @import dplyr
#' @param x object of class myS3
#' @method work_with_myS3 myS3
#' @export
命名空间中还有一个条目:
S3method(work_with_myS3,myS3)
为什么会这样,如何使该功能在包中可用?我怀疑我犯了一些小错误。
当您使用对象 class myS3
调用 work_with_myS3
时,UseMethod
函数会查找:
work_with_myS3.myS3
或work_with_myS3.default
因此您需要导出 work_with_myS3.myS3
,所以
#' @export
work_with_myS3.myS3 = function(x) {
## do stuff
}
或者,您可以定义一个 default
方法并将其导出。