r - 使用roxygen2时如何指定以哪种顺序加载S4方法

标签 r documentation package s4 roxygen2

我已经多次遇到以下问题。

假设您在以下文件classA中描述了classBclassA.R这两个类:

#' the class classA
#'
#' This is a class A blabla
#' \section{Slots}{\describe{\item{\code{A}}{a Character}}}
#' @ name classA
#' @rdname classA
#' @exportClass classA
setClass("classA",representation(A="character"))

classB.R
#' the class classB
#'
#' This is a class B blabla
#' \section{Slots}{\describe{\item{\code{B}}{an object of class A}}}
#' @ name classB
#' @rdname classB
#' @exportClass classB
setClass("classB",representation(B="classA"))

我相信roxygen2按字母顺序读取了这些文件,但事实并非如此。如果我尝试构建软件包,则可能会出现以下错误:
roxygenize("./myExample")
Error in getClass(Class, where = topenv(parent.frame())) :
   "ClassA" is not a defined class

我如何确保roxygenize()知道以什么顺序读取文件,即应该先读取哪个类定义?

注意:我知道我回答了自己的问题。这是因为我经常遇到此问题,并且在查看roxygen2的代码后才意识到执行此问题的正确方法。因此,作为引用,这是我的发现。

最佳答案

有两种方法可以实现此目的:

?collate_roclet中所述,您可以使用@include标记来指定应在哪个类之前读取的类。在这种情况下,您可以在实际的R代码之前,将以下行添加到classB.r文件中:

#' @include classA.r

专门读取这些标签是为了更新Collate文件中的DESCRIPTION字段,它们是解决问题的推荐方法。

在某些情况下,依赖关系可能太复杂了,您想自己保持概述,而不是完全依赖于在代码库中添加@include标记。在这种情况下,您只需在Collate文件的末尾指定DESCRIPTION字段即可,如下所示:
Package: myExample
Type: Package
...
Collate:
    'classA.R'
    'classB.R'

函数roxygenize()首先检查DESCRIPTION文件,并首先按照指定的顺序加载在那里指定的所有文件。只有这样,程序包的其余部分才会加载。

关于r - 使用roxygen2时如何指定以哪种顺序加载S4方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13510234/

相关文章:

r - R 包的 HTML 帮助页面中的数字(R 代码执行结果)

r - 考虑到每个东西运行了多长时间;计算一段时间内运行的事物总数?

类与类对象实例的 Python 文档样式

linux - Bash 脚本中文档样式的标准是什么?

php - 在为文档编写注释头时,如何指定该函数返回另一个函数?

java - 在java中导入我们自己的类

R:避免使用 for 循环顺序选择一列中的值并使用另一列中的值向量应用函数

r - 从列中的文件名列表中提取组件以在 R 中创建新列

r - 无法在 R 中安装基于 Fortran 的包 - "gfortran -m32:not found"

scala - 如何将一个简单的单个 Scala 文件打包为一个独立的 jar(没有 sbt)?