[英]How to specify in which order to load S4 methods when using roxygen2
我已多次遇到以下問題。
假設您有兩個類, classA
和classB
在以下文件中描述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.