我正在编写一个包,它定义了一个新类,测量器和一个print方法,即print.surveyor.我的代码工作正常,我使用roxygen进行内联文档.但R CMD check发出警告:
在文档对象'print.surveyor'中使用但不在代码中使用的函数/方法:print
我使用了Hadley编写的以下两页作为灵感:
命名空间和文档功能,两者都说正确的语法是@method function-name class
所以我的问题是:print使用Roxygen 记录我的新类的方法的正确方法是什么?更具体地说,我如何摆脱警告?
这是我的代码:(评论的文档表明试图解决这个问题,但没有一个工作.)
#' Prints surveyor object.
#'
#' Prints surveyor object
#'
## #' @usage print(x, ...)
## #' @aliases print print.surveyor
#' @param x surveyor object
#' @param ... ignored
#' @S3method print surveyor
print.surveyor <- function(x, ...){
cat("Surveyor\n\n")
print.listof(x)
}
Run Code Online (Sandbox Code Playgroud)
和氧化输出,即print.surveyor.Rd:
\name{print.surveyor}
\title{Prints surveyor object.}
\usage{print(x, ...)
#'}
\description{Prints surveyor object.}
\details{Prints surveyor object
#'} …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建 R 包的第一次尝试。我有下面的一些功能。
#' @export
overview <- function(x, ...) {
UseMethod("overview")
}
overview.query <- function(return.query, ...) {
Run Code Online (Sandbox Code Playgroud)
现在,当我使用devtools::load_all()(加载所有函数)时,一切正常,并overview.query在我传递class query.
但是重建,并且UseMethod无法再找到该overview.query功能(因此未加载所有功能),我做错了什么?
错误消息:没有适用于 'overview' 的方法应用于类“c('query', 'data.frame')”的对象
我认为只有向用户公开的@export函数才会被'ed,所有其他函数仍然对其他包函数在内部可见。
我正在制作一个包,我想为剧情定义一种新方法.我正在使用roxygen源代码文档.这个问题看起来非常类似于: 如何使用Roxygen从不同的包中正确记录泛型的S3方法? 和 Roxygen2 - 如何正确记录S3方法, 但我仍然无法让它工作.
导致我麻烦的相关部分是:
#' Generic plot method
#'
#' @param x \dots
#' @param ... \dots
#' @export
plot <- function(x, ...) UseMethod("plot")
#' Default plot method
#'
#' @param x \dots
#' @param ... \dots
#' @importFrom graphics plot
#' @method plot default
#' @S3method plot default
plot.default <- function(x, ...) graphics::plot(x, ...)
#' Plotting function for ABI object
#'
#' Description.
#'
#' @param x ABI object as generated by newABI.
#' @param …Run Code Online (Sandbox Code Playgroud) 我已经更新至V4.0.0 roxygen2和我现在正在尝试转换@ S3method和@method命令@export以下的指示命令在这里.这似乎对我的所有方法都有效,除了那些与print相关的方法.
这是一个玩具示例,说明了我的问题(我理解示例的愚蠢).这是.R文件......
#' Test.
#'
#' Test.
#'@aliases zzzTest print.zzzTest summary.zzzTest
#'@param v A numeric vector.
#'@param x A \code{zzzTest} object.
#'@param object A \code{zzzTest} object.
#'@param \dots Additional arguments for the S3 methods.
#'@return A \code{zzzTest} object.
#'@keywords manip
#'@examples
#'z <- zzzTest(runif(10,1,2))
#'print(z)
#'summary(z)
#'@rdname zzzTest
#'@export zzzTest
zzzTest <- function(v) {
tmp <- log(v)
class(tmp) <- "zzzTest"
}
#'@rdname zzzTest
#'@export
print.zzzTest <- function(x,...) { print(x, ...) }
#'@rdname zzzTest
#'@export
summary.zzzTest <- …Run Code Online (Sandbox Code Playgroud) 我想使用 roxygen2 导出一个名为 [.myclass 的 S3method,但我看不到一种干净的方法来做到这一点。
我需要 NAMESPACE
S3method("[",myclass)
Run Code Online (Sandbox Code Playgroud)
在其中或在我需要该包后无法使用该方法,但 roxygen2 似乎不想帮助我解决这个问题。
我可以强迫它
#' @S3method [ myclass
setMethodS3("[",
c(x="myclass"),
function(x,i) {
blah blah balh
})
Run Code Online (Sandbox Code Playgroud)
但是 roxygen 然后说 s3method 已弃用,我应该改用 @export,但是
#' @export
setMethodS3("[",
c(x="myclass"),
function(x,i) {
blah blah balh
})
Run Code Online (Sandbox Code Playgroud)
只是不这样做。(在 NAMESPACE 中放置一个空的导出)。
我问了包的作者,他建议我使用@method 和@export,但这也不起作用
#' @method [ myclass
#' @export
setMethodS3("[",
c(x="myclass"),
function(x,i) {
blah blah balh
})
Run Code Online (Sandbox Code Playgroud)
在 NAMESPACE 中也以“export()”结尾
我错过了什么?
我已经阅读了以下两个讨论:
Roxygen2 - 如何在
使用 Roxygen 构建 R 包时正确记录 S3 方法S3 方法一致性警告
以及以下两个教程:
http : //cran.r-project.org/doc/manuals/R-exts .html#Generic-functions-and-methods
http://adv-r.had.co.nz/S3.html,
但我的问题仍然没有解决。以下是详细信息:
我想在一个包中定义一个 S3 的 plot() 泛型方法,我的代码是:
#' description
#'
#' more details
#'
#' @param x "test" object
#' @param label parameter one
#' @param log parameter two
#' @param ... graphical parameters to plot
#'
#' @examples
#' plot(a)
#'
#' @export
plot <- function(x, label=TRUE, log=TRUE, ...){
UseMethod("plot")
}
#' @export
plot.test <- function(x, label=TRUE, log=TRUE, ...){ …Run Code Online (Sandbox Code Playgroud) 我正在创建一个R-package,我正处于我BUILD的包装步骤.
我已经阅读了关于NAMESPACE 的 Writing R Extensions文档(更具体地说,有关导入,导出和注册S3method的1.5.1和1.5.2节).
我担心这一步,因为当CHECK我收到我的包裹时,我收到了这个警告:
发现以下明显的S3方法已导出但未注册:print.myClass print.myOtherClass summary.myClass summary.myOtherClass请参阅"编写R扩展"手册中的"注册S3方法"部分.
任何有助于破译未注册S3方法和NAMESPACE文件的后果的任何帮助都将成为我的一天.
谢谢你的帮助.