Управление порядком использования строк DynLib в NAMESPACE с помощью roxygen2 - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над пакетом R, который использует стороннюю dll-библиотеку для загрузки данных. Я написал функции-оболочки для той внешней библиотеки DLL, которую я могу вызвать с помощью .C()

Предположим, что мой пакет называется mypackage, а внешний - xternal.dll. Похоже, что для загрузки mypackage.dll, сгенерированного во время компиляции, необходимо, чтобы external.dll был загружен первым. Я использую roxygen2 для управления файлом NAMESPACE, и я использовал теги #' @useDynLib. К сожалению, когда roxygen2 записывает файл NAMESPACE, он добавляет вызовы useDynLib в лексическом порядке общего объекта, вызываемого как A-Z, a-z.

Есть ли способ контролировать порядок useDynLib в пространстве имен с помощью roxygen2?

Пока я нашел следующие решения, и ни одно из них не кажется особенно убедительным:

  • Переименование моего пакета в лексическом порядке после внешнего dll.

  • Управление NAMESPACE file manually.

* +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, пакет будет установлен и работает нормально.

1 Ответ

0 голосов
/ 07 ноября 2018

После очень полезной подсказки, полученной на 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)

и общие объекты загружаются в правильном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...