Распределение функций TMB в пакетах R и проверках CRAN

У меня 9 файлов cpp в /src - 8 из Rcpp и 1 из TMB. Я могу скомпилировать все и успешно выполнить код ИЛИ пройти проверки CRAN. Но не оба.

Способ 1

Пусть R скомпилирует все файлы cpp и сгенерирует одну DLL: "mypackage.dll" и TMB::MakeADfun(..., DLL="mypackage"):

  • проходит все проверки CRAN (кроме примечания об установленном размере пакета, см. ниже).
  • Rcpp функции работают нормально
  • вызов функции TMB приводит к: Error in .Call("getParameterOrder", data, parameters, new.env(), PACKAGE = DLL) : "getParameterOrder" not available for .Call() for package "mypackage"
  • с помощью TMB::MakeADFun(..., DLL="mypackage", checkParameterOrder=FALSE) результаты в: Error in .Call("TMBconfig", e, as.integer(1), PACKAGE = DLL) : "TMBconfig" not available for .Call() for package "mypackage"

Способ 2

Используйте 'makevars.win' после этого предложения, добавьте useDynLib MyTMB, а также TMB::MakeADfun(..., DLL="MyTMB") и создайте две библиотеки DLL (mypackage.dll и MyTMB.dll):

makevars.win:

all: MyTMB.dll

MyTMB.dll: MyTMB.cpp
    $(R_HOME)/bin$(R_ARCH_BIN)/Rscript --vanilla -e "TMB::compile('MyTMB.cpp', safebounds=FALSE, safeunload=FALSE)"

clean:
  rm -rf *o
  • обе функции Rcpp и TMB работают
  • devtools::check() приводит к одному предупреждению для каждой из функций Rcpp:

    checking foreign function calls ... WARNING
        Foreign function calls to a different package:
          .Call("_rcppfunction1", ..., PACKAGE = "mypackage")
    
  • и одна заметка о большом размере установленного пакета. libs подкаталог занимает более 30 МБ и примерно вдвое больше, чем метод 1.

Разработчики Rcpp рекомендуют не использовать файл makevars, и, очевидно, я перезаписываю что-то из Rcpp, чтобы вызвать проблему "вызовов внешних функций", даже если пакет является текущим пакетом. Похоже, мои варианты:

  • измените 'makevars', чтобы восстановить значения по умолчанию Rcpp, которые избегают предупреждения, и попросите CRAN принять примечание об установленном размере пакета. Не уверен, как сделать первое.
  • найти решение проблемы 1 и попросить установить меньший размер установленного пакета. Было бы самое простое решение только с одной DLL. Не уверен, что проблема вызвана тем, что я компилирую Rcpp и TMB, и если да, то как это исправить.
  • или что-то еще, что я скучаю.

Какие-либо предложения?

R детали:

платформа x86_64-w64-mingw32
арка x86_64
os mingw32
система x86_64, mingw32
статус
основной 3
несовершеннолетний 3.3

0 ответов

Другие вопросы по тегам