【问题标题】:What's the recommended package build workflow with packages that contain S4 classes? [duplicate]对于包含 S4 类的包,推荐的包构建工作流程是什么? [复制]
【发布时间】:2012-11-30 09:15:00
【问题描述】:

可能重复:
How to properly document S4 class slots using Roxygen2

我想使用 R Studio 和 roxygen2 构建一个包含 S4 classes 的包。 当我在我的包中引入几个S4 classes 时,我已经使用roxygen2 语法记录了我的所有函数。

现在我意识到没有开箱即用的“@slot”功能。所以我想知道如何让我的所有文档都为其他功能工作,并像this thread 中建议的那样手动记录S4 classes

或者换句话说,您会推荐哪种工作流程来构建一个包含老式函数和S4 classes 的包?

编辑:您是否建议将 R Studio 构建工具配置为不创建 .Rd 文件。 roxygenize 手动然后添加信息?这仍然会导致覆盖类的手动生成的 .Rd 文件......

【问题讨论】:

  • @Hans0I0 你的问题到底是什么?执行您链接到的线程中所说的内容,例如inside-r.org/questions/…。确保正确导出它们。µ
  • 我的问题是 R Studio 标准工作流程。每次我点击 build Roxygen 时都用于创建 .Rd 文件。如果我像此线程中建议的那样手动添加类的 .Rd 文件,下次我从 R Studio 运行构建时,这些手动更改将被覆盖。
  • 但您不必手动添加 .Rd 文件。您只需要使用描述来创建您的插槽。

标签: r rstudio s4 roxygen2


【解决方案1】:

关于 roxygen 和 S4 类的一般信息

roxygen 的第一个版本有一个@slot 标签,但该版本不再维护,而是支持roxygen2。所以不建议使用旧版本。

目前,roxygen2 并没有真正支持 S4 类。 Hadley 正在努力在roxygen3 (https://github.com/hadley/roxygen3) 中实现这一目标。如果您想试一试并感到勇敢:从 github 安装 roxygen3 并尝试开发版本。请注意,此版本最终会合并到roxygen2,因此问题会及时自行解决。

关于您的工作流程:

我个人总是觉得结合使用 roxygen 和手动编写的 .Rd 文件是个坏主意。但如果必须,您可以使用参数roxygen.dir 将 roxygen 的输出发送到不同的目录。这样你就可以将你想要的任何东西复制回包目录,而不会覆盖手动写入的文件。

roxygenise("./mypackage", roxygen.dir="./myroxygendir")

我要做的就是使用roxygen2 为您的类编写 Rd 文件,如您链接到的线程中所述。您不必出于某种未知原因而像您认为的那样手动添加它们。您只需像往常一样使用#' 来指示 Rd 块,并使用您链接到的线程中给出的任何内容。如果您想让插槽成为一个单独的部分,您可以使用@section 标记来实现,如下例所示。

一个如何使用roxygen2 添加插槽的示例:

#' The MY class
#'
#' This class blabla yadayada
#'
#'@section Slots:
#'  \describe{
#'    \item{\code{aslot}:}{Object of class \code{"numeric"}, containing 
#'whatever and a bit more}
#'    \item{\code{anotherslot}:}{Object of class \code{"character"}, containing
#' strings.}
#'  }
#'
#' @note Yes, you can add notes
#' @name MY 
#' @rdname MY
#' @aliases MY-class
#' @exportClass MY
#' @author Joris Meys
setClass("MY",
         representation=representation(aslot="numeric",
                                       anotherslot="character"
                                       )

【讨论】:

  • 肯定会查看 roxygen3 的开发版本。不用说,我是哈德利作品的忠实粉丝。但是,目前我只是想避免在完成我的包裹时注意力不集中。虽然我喜欢你的两个答案,但我只能 +1 :) 。在您发表评论之前,我没有意识到我实际上可以在同一个文档中拥有 \describe 和 @params。它会在 R Studio 中引发警告,但可以正常工作。谢谢乔里斯!
  • @hans0l0 如果您有 S4 课程,我想知道为什么您需要在同一个文档中使用 @param。就个人而言,我将我的类文件与 getter、setter 等分开。这对我来说更容易保持概述,并且它不会在 RStudio 中发出警告。请务必检查stackoverflow.com/questions/13510234/… 是否使用@include 标签
  • 你是对的。我不使用@param。只是想说我不知道​​我可以将@语法与\describe结合起来。啊,谢谢你的链接——确实很有教育意义……
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多