我已经更新到roxygen2 v4.0.0,现在正试图按照这里的说明将@S3method和@method命令转换为@export命令。这似乎对我所有的方法都很有效,除了那些与打印相关的方法。
这是一个玩具的例子,说明了我的问题(我理解这个例子的愚蠢)。这是。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) }
这是氧化生成的。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()),但不适用于打印方法(注意没有method(),只有print. zzztest)。我还成功地将@export用于其他. r文件中的其他几个方法。我的问题似乎只发生在打印方法上。
有人能指出我哪里错了吗?提前感谢您对这个问题的帮助。
为了它的价值,我使用R 3.1.0, RStudio 0.98.501和roxygen2 4.0.0。
UPDATE 1:在命名空间中有一个export(print.zzzTemp)但是没有一个S3method(print,zzzTemp)…也就是说,和ZNK一样的问题(在评论中)。
UPDATE 2:我将确切的。r文件复制到另一个包中,对该包进行氧化,并且正确创建了。rd文件(和相应的命名空间)。这意味着我在两个包之间有一些与roxygen2相关的"开关"不同,但我似乎无法隔离差异或找到这样的"开关"(我相信我只通过RStudio中的项目选项控制了roxygen)。
我已经为我的问题找到了解决方案(在上面的评论中),它可能对你的工作。新闻报道。在v3.0.0版本的md文件中,提到不需要@method
标记,因为roxygen2会找出它,但是在roxygen2不能这样做的极少数情况下,它仍然可用。我的解决方案:
#' @method print myClass
#' @export
print.myClass <- function(x) print("myClass")
这让我返回了命名空间文件中的S3method(print, myClass)
。
代码的第16行
#'@export zzzTest
必须是
#'@export
正如Hadley在这个链接中提到的。
您可能还需要删除@export
的第二个和第三个实例。在构建/检查之前,不要忘记做devtools::document()
。
@useDynLib pkg-name
标记之前,我上面概述的代码对我有效。然后,我不得不求助于@method
标记来获得devtools::document()
之后所需的名称空间。