Я работаю над пакетом R, который использует стороннюю dll-библиотеку для загрузки данных. Я написал функции-оболочки для той внешней библиотеки DLL, которую я могу вызвать с помощью .C()
Предположим, что мой пакет называется mypackage
, а внешний - xternal.dll
. Похоже, что для загрузки mypackage.dll
, сгенерированного во время компиляции, необходимо, чтобы external.dll
был загружен первым. Я использую roxygen2
для управления файлом NAMESPACE
, и я использовал теги #' @useDynLib
. К сожалению, когда roxygen2
записывает файл NAMESPACE
, он добавляет вызовы useDynLib
в лексическом порядке общего объекта, вызываемого как A-Z, a-z.
Есть ли способ контролировать порядок useDynLib
в пространстве имен с помощью roxygen2
?
Пока я нашел следующие решения, и ни одно из них не кажется особенно убедительным:
* +1032 * Пример:
Функция foo.R:
#' @export
#' @useDynLib xternal
#' @useDynLib mypackage
foo <- function(){
return(FALSE)
}
приводит к NAMESPACE
после вызова devtools::document()
:
# Generated by roxygen2: do not edit by hand
export(foo)
useDynLib(mypackage)
useDynLib(xternal)
Пакет не загрузится, однако, если я вручную поменяю две строки useDynLib
, пакет будет установлен и работает нормально.