roxygen2:导出打印方法的问题

时间:2014-05-18 17:26:47

标签: r roxygen2

我已更新到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) )。

2 个答案:

答案 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。