我已更新到roxygen2 v4.0.0,现在正尝试按照here的指示将@ 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 <- function(object,...) { summary(object) }
这是由roxygenising产生的.Rd文件......
% Generated by roxygen2 (4.0.0): do not edit by hand
\name{zzzTest}
\alias{print.zzzTest}
\alias{summary.zzzTest}
\alias{zzzTest}
\title{Test.}
\usage{
zzzTest(v)
print.zzzTest(x, ...)
\method{summary}{zzzTest}(object, ...)
}
\arguments{
\item{v}{A numeric vector.}
\item{x}{A \code{zzzTest} object.}
\item{object}{A \code{zzzTest} object.}
\item{\dots}{Additional arguments for the S3 methods.}
}
\value{
A \code{zzzTest} object.
}
\description{
Test.
}
\examples{
z <- zzzTest(runif(10,1,2))
print(z)
summary(z)
}
\keyword{manip}
我对@export的使用似乎适用于摘要方法(注意\ method()),但不适用于print方法(注意没有\ method(),只有print.zzzTest)。我也成功地将@export用于其他.R文件中的其他几种方法。我的问题似乎只出现在print方法中。
有人可以指出我哪里出错吗?提前感谢您对此问题的任何帮助。
对于它的价值,我使用的是R 3.1.0,RStudio 0.98.501和roxygen2 4.0.0。
UPDATE 1:命名空间中有一个导出(print.zzzTemp)但不是S3method(print,zzzTemp)...即与ZNK相同的问题(在注释中)。
UPDATE 2:我将确切的.R文件复制到另一个包中,对该包进行了roxygen化,并正确创建了.Rd文件(和相应的命名空间)。这意味着我在两个软件包之间有一些与roxygen2不同的“开关”,但我似乎无法隔离差异或找到这样一个“开关”(我相信我只能通过RStudio中的项目选项控制roxygen) )。
答案 0 :(得分:6)
我找到了解决问题的方法(在上面的评论中),它可能适用于你的问题。在The NEWS.md file for v3.0.0中,提到不需要@method
标签,因为roxygen2会弄明白,但在极少数情况下,roxygen2不能这样做。我的解决方案:
#' @method print myClass
#' @export
print.myClass <- function(x) print("myClass")
这让我回到了我的NAMESPACE文件中的S3method(print, myClass)
。
答案 1 :(得分:0)
代码的第16行
#'@export zzzTest
需要
#'@export
正如哈德利在link中提到的那样。
您可能还需要删除@export
的第二个和第三个实例。在构建/检查之前不要忘记devtools::document()
。
上面列出的编码对我有用,直到我添加@useDynLib pkg-name
标记。然后,我不得不求助于@method
标记,以便在devtools::document()
之后获得所需的NAMESPACE。