簡體   English   中英

使用roxygen2控制NAMESPACE中useDynLib行的順序

[英]Controlling the order of useDynLib lines in NAMESPACE with roxygen2

我正在使用外部第3方dll加載數據的R包。 我已經將包裝函數寫入了可以用.C()調用的外部dll。

假設我的程序包稱為mypackage ,外部程序稱為xternal.dll 似乎要加載在編譯期間生成的mypackage.dll ,有必要先加載external.dll 我正在使用roxygen2來管理NAMESPACE文件,並且使用了#' @useDynLib標記。 不幸的是,當roxygen2寫入NAMESPACE文件時,它會按共享對象的詞法順序(如AZ,az)添加useDynLib調用。

有沒有辦法控制的順序useDynLib在該命名空間roxygen2

到目前為止,我已經找到了以下解決方案,但它們都不是特別引人注目的:

  • 重命名我的包以在外部dll之后按詞法排序。

  • NAMESPACE file manually管理NAMESPACE file manually

示例:函數foo.R:

#' @export
#' @useDynLib xternal
#' @useDynLib mypackage
foo <- function(){
  return(FALSE)
}

在調用devtools::document()之后返回NAMESPACE

# Generated by roxygen2: do not edit by hand

export(foo)
useDynLib(mypackage)
useDynLib(xternal)

該軟件包將無法加載,但是,如果我手動交換兩條useDynLib行,則該軟件包將安裝並運行良好。

GitHub上收到非常有用的提示后:解決方案是使用@rawNamespace標記,該標記將逐字記錄行寫入NAMESPACE文件:

foo.R:

#' @export
#' @rawNamespace useDynLib(xternal); useDynLib(mypackage)
foo <- function(){
  return(FALSE)
}

產生一個NAMESPACE文件:

# Generated by roxygen2: do not edit by hand

export(foo)
useDynLib(xternal); useDynLib(mypackage)

並且共享對象以正確的順序加載。

暫無
暫無

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

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