如果要构建包含S4类的软件包,推荐使用哪种软件包构建工作流程?

3

可能重复:
如何使用Roxygen2正确记录S4类别的插槽

我想使用R Studio和roxygen2构建一个包,其中包含S4类别。 当我向我的包中引入一些S4类别时,我已经使用roxygen2语法记录了所有函数的文档。

现在我意识到没有开箱即用的'@slot'功能。 那么我想知道,我如何像this thread中建议的那样手动记录S4类别的文档,同时保留其他函数的所有文档工作?

换句话说,您推荐哪种工作流程来构建同时包含旧式函数和S4类别的包?

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


@Hans0I0,你的问题是什么?按照你链接中提到的线程和例如http://www.inside-r.org/questions/how-properly-document-s4-class-slots-using-roxygen2所述的方法进行操作。确保正确导出它们。 - Joris Meys
1
我的问题是 R Studio 的标准工作流程。每次我点击“构建”时,都会使用 Roxygen 创建 .Rd 文件。如果我按照此线程中建议的手动添加类的 .Rd 文件,下次我从 R Studio 运行构建时,这些手动更改将被覆盖。 - Matt Bannert
1
但是您不必手动添加 .Rd 文件。您只需要使用 describe 来创建您的插槽即可。 - Joris Meys
1个回答

4

关于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的开发版本。毋庸置疑,我是Hadley的工作的忠实粉丝。然而,目前我只想避免缺乏专注地完成我的软件包。虽然我喜欢你们两个的回答,但我只能+1 :) 。在你的评论之前,我没有意识到我实际上可以在同一个文档中使用\describe和@params。它在R Studio中会抛出警告,但是可以正常工作。谢谢Joris! - Matt Bannert
如果您有一个S4类,我想知道为什么您需要在同一文档中使用@param。就个人而言,我会将我的类文件与getter、setter和其他内容分开。这样更容易让我保持概述,并且不会在RStudio中发出警告。请务必查看https://dev59.com/mWYr5IYBdhLWcg3wpbuQ以了解如何使用`@include`标记。 - Joris Meys
你说得对。我没有使用 @param,只是想说我不知道我可以将 @ 语法与 \describe 结合使用。啊,谢谢你的链接 - 的确很有教育意义... - Matt Bannert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接