[英]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.