簡體   English   中英

如何在使用roxygen2時指定加載S4方法的順序

[英]How to specify in which order to load S4 methods when using roxygen2

我已多次遇到以下問題。

假設您有兩個類, classAclassB在以下文件中描述classA.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按字母順序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

這些標記專門用於更新DESCRIPTION文件中的Collate字段,是處理問題的推薦方法。

在某些情況下,依賴關系可能非常復雜,您希望自己保持概述,而不是完全依賴於在代碼庫中添加@include標記。 在這種情況下,您只需在DESCRIPTION文件的末尾指定Collate字段,如下所示:

Package: myExample
Type: Package
...
Collate:
    'classA.R'
    'classB.R'

函數roxygenize()首先檢查DESCRIPTION文件,然后按照指定的順序加載首先指定的文件。 只有這樣才能加載包的其余部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM