Тест R расширение без R

Я работал над расширением до R, который собирается сделать некоторую кластеризацию. В проекте используются C++ и Rcpp (расчеты выполняются с использованием RcppArmadillo). В результате у меня есть несколько классов, которые мне нужно проверить. Мне предложили использовать googletest. К сожалению, я не могу запустить какой-либо тестовый код.

Проблема в том, что для тестирования классов, использующих Rcpp с каркасом googletest, мне нужно работать вне среды R.

Я имею в виду, я не преобразовываю данные в стандартные структуры данных C++, такие как vector. Набор данных должен быть огромным. Я получаю NumericMatrix с данными и передаю их. Это заставляет все классы C++ использовать Rcpp.h (или броненосец). Интересно, смогу ли я использовать эти классы за пределами R.

Я искал любую информацию об автономных программах, которые используют Rcpp в качестве библиотеки, но все, что я получаю, это "автономный" код, в отличие от кода C++, скомпилированного непосредственно в интерфейсе командной строки R с помощью встроенного пакета. Я бы предпочел работать с googletest, потому что я могу напрямую тестировать C++.

Вопрос в том, можно ли использовать Rcpp без R?

1 ответ

Решение

В строгом смысле, вы не можете, потому что код Rcpp предназначен для вызова из R.

В более широком смысле, конечно, вы можете при условии, что вы пишете свои интерфейсы правильно. Напишите код C++, который не зависит от заголовков R и Rcpp, используя только C++ и STL и Armadillo и, возможно, googletest идиомы. Т.е. не используйте типы Rcpp, такие как Rcpp::NumericMatrix но используйте типы Armadillo, такие как arma::mat, Проверь на них дневной свет. Может быть, обернуть их в библиотеке.

Затем просто напишите тонкий слой доступа, используя Rcpp и RcppArmadillo. Et вуаля - вы проверили код, доступный в R.

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