Как вызвать функции C из пакета nloptr непосредственно в пакете Rcpp?

Я создаю пакет R, который также имеет коды C ++, используя RcppArmadillo. Одна из функций должна оптимизировать функцию. В настоящее время я импортировал nloptr::nloptr функция в C ++, а затем использовать его для оптимизации функции. Код здесь: https://github.com/daijiang/phyr/blob/master/src/pglmm_gaussian.cpp#L267-L282; также строка 244-245.

Потому что костяк nloptr::nloptr написано на C, вызов функции R на c ++ кажется не лучшим способом и, вероятно, замедлит работу. В идеале, мы должны вызывать его функции C непосредственно в файле c ++. Но я не знаю, как это сделать, учитывая мой очень ограниченный опыт работы с c / c ++. Кто-нибудь может мне с этим помочь? Спасибо!

1

Решение

Существует довольно активное обсуждение этого в репозитории Nloptr.

Ваша более глубокая проблема заключается в том, что nlopt требуется связывание, которое приводит вас к зависимости от операционной системы, которую сложнее настроить, чем к чистой библиотеке только для заголовков, такой как RcppArmadillo. Вам нужно будет узнать об этом более сложном шаге, и не существует простого правила , Пакет RcppGSL (и виньетка, и глава Rcpp Book) являются примерно эквивалентным примером.

Изменить несколько месяцев спустя: С новым nloptr версия на CRAN, мы написали демонстрационный пакет RcppNLoptExamples (также в CRAN сейчас), который показывает, как использовать nlopt из кода C / C ++ через Rcpp для вызова из R.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]