【问题标题】:roxygen2: Issue with exporting print methodroxygen2:导出打印方法的问题
【发布时间】:2014-05-18 17:26:46
【问题描述】:

我已更新到 roxygen2 v4.0.0,现在正尝试按照 here 的指示将 @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) }

这是由 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()),但不适用于打印方法(注意没有\method(),只有print.zzzTest)。我还成功地将 @export 用于其他 .R 文件中的其他几种方法。我的问题似乎只出现在 print 方法上。

有人能指出我哪里出错了吗?提前感谢您对此问题的任何帮助。

不管怎样,我使用的是 R 3.1.0、RStudio 0.98.501 和 roxygen2 4.0.0。

更新 1: 在命名空间中有一个 export(print.zzzTemp) 但没有一个 S3method(print,zzzTemp) ...即,与 ZNK 相同的问题(在 cmets 中)。

更新 2: 我将确切的 .R 文件复制到另一个包中,对该包进行了 roxygenized,然后正确创建了 .Rd 文件(和相应的命名空间)。这意味着我在两个包之间有一些与 roxygen2 相关的“开关”不同,但我似乎无法隔离差异或找到这样的“开关”(我相信我只是通过 RStudio 中的项目选项控制了 roxygen )。

【问题讨论】:

  • 我遇到了类似的问题,只是我没有记录我的打印方法。我的命名空间已从 S3method(print, myClass) 更改为 export(print.myClass)。我正在考虑就此提交错误报告。

标签: r roxygen2


【解决方案1】:

我找到了解决我的问题的方法(在上面的 cmets 中),它可能对你有用。在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)

【讨论】:

  • 这对我也有用;不过,我想知道为什么我原来的方法不起作用。无论如何,感谢您的解决方法。
  • 看来这几天(我现在用的是roxygen2-7.1.1),@method@S3method都被删除了;相反,@exportS3Method generic class 有效。
【解决方案2】:

代码的第 16 行

#'@export zzzTest

需要

#'@export

正如 Hadley 在 link 中提到的那样。

您可能还需要删除@export 的第二个和第三个实例。并且不要忘记在构建/检查之前做devtools::document()

在我添加@useDynLib pkg-name 标签之前,我上面概述的编码对我有用。然后我不得不求助于@method 标签在devtools::document() 之后获得所需的NAMESPACE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多