检查期间未找到导出的 S3 方法
Exported S3 method not found during check
在一个包中,我有一个函数 foo
returns class "foo"
的一个对象。我还有一个 plot
方法 class "foo"
.
#' Create a "foo" object
#'
#' @param x An \R object.
#'
#' @return
#' A "foo" object.
#'
#' @examples
#' foo_object <- foo(1)
#' plot.foo(foo_object)
#'
#' @export
foo <- function(x) {
structure(x, class = "foo")
}
#' @export
#' @importFrom graphics plot
plot.foo <- function(x, ...) {
class(x) <- setdiff(class(x), "foo")
plot(x)
invisible(NULL)
}
在使用 devtools::load_all
加载包后,我可以毫无问题地评估示例代码。但是,devtools::check
抱怨:
Error in plot.foo(foo_out) : could not find function "plot.foo"
Execution halted
我的 R 会话似乎知道 plot.foo
,但不知道 devtools::check
。这是怎么回事?
编辑: 澄清一下,当我用 plot(foo_object)
替换 @examples
下的调用 plot.foo(foo_object)
时,devtools::check
通过了。这并不让我吃惊,无论如何用户都应该调用泛型。我的问题仍然存在:为什么 devtools::check
无法找到 plot.foo
,因为我使用了 @export
标签并且 S3method(plot, foo)
出现在 NAMESPACE
之后的 devtools::document
]?
如果您希望能够直接调用 plot.foo
,那么您还需要显式导出该版本。按照惯例,通常您不会从包中导出 class-specific 泛型函数的实现。通常,您只需声明 S3 方法存在,而不导出该函数。就像如果你调用 methods(plot)
你会看到一堆带星号的,这意味着它们是意外的并且不应该被直接调用。如果您出于某种原因想要将其导出为单独的函数,您可以添加一个额外的导出语句。例如
#' @rdname foo-methods
#' @export plot.foo
#' @export
#' @importFrom graphics plot
plot.foo <- function(x, ...) {
class(x) <- setdiff(class(x), "foo")
plot(x)
invisible(NULL)
}
在一个包中,我有一个函数 foo
returns class "foo"
的一个对象。我还有一个 plot
方法 class "foo"
.
#' Create a "foo" object
#'
#' @param x An \R object.
#'
#' @return
#' A "foo" object.
#'
#' @examples
#' foo_object <- foo(1)
#' plot.foo(foo_object)
#'
#' @export
foo <- function(x) {
structure(x, class = "foo")
}
#' @export
#' @importFrom graphics plot
plot.foo <- function(x, ...) {
class(x) <- setdiff(class(x), "foo")
plot(x)
invisible(NULL)
}
在使用 devtools::load_all
加载包后,我可以毫无问题地评估示例代码。但是,devtools::check
抱怨:
Error in plot.foo(foo_out) : could not find function "plot.foo"
Execution halted
我的 R 会话似乎知道 plot.foo
,但不知道 devtools::check
。这是怎么回事?
编辑: 澄清一下,当我用 plot(foo_object)
替换 @examples
下的调用 plot.foo(foo_object)
时,devtools::check
通过了。这并不让我吃惊,无论如何用户都应该调用泛型。我的问题仍然存在:为什么 devtools::check
无法找到 plot.foo
,因为我使用了 @export
标签并且 S3method(plot, foo)
出现在 NAMESPACE
之后的 devtools::document
]?
如果您希望能够直接调用 plot.foo
,那么您还需要显式导出该版本。按照惯例,通常您不会从包中导出 class-specific 泛型函数的实现。通常,您只需声明 S3 方法存在,而不导出该函数。就像如果你调用 methods(plot)
你会看到一堆带星号的,这意味着它们是意外的并且不应该被直接调用。如果您出于某种原因想要将其导出为单独的函数,您可以添加一个额外的导出语句。例如
#' @rdname foo-methods
#' @export plot.foo
#' @export
#' @importFrom graphics plot
plot.foo <- function(x, ...) {
class(x) <- setdiff(class(x), "foo")
plot(x)
invisible(NULL)
}