Вы можете использовать имеющиеся у вас знания по отладке программ на C ++, превратив проблему в чисто задачу разработки и отладки на C ++ с помощью RInside (отличный компаньон Rcpp).
Напишите функцию main()
C ++, которая создает экземпляр R с использованием RInside, выполняет код R (или создает сценарий R), который устанавливает тестовый пример, а затем вызывает тестируемую функцию из main (), например,
#include <Rcpp.h>
#include <RInside.h>
#include "function_under_test.h"
int main(int argc, char *argv[])
{
using namespace std;
using namespace Rcpp;
RInside R(argc, argv);
string evalstr = R"(
a <- matrix(c(1,1,1, 1,1,1, 1,1,1), nrow = 3, ncol=3)
)";
R.parseEvalQ(evalstr);
SEXP a = R["a"];
R["b"] = function_under_test(a);
evalstr = R"(
print(b)
)";
R.parseEvalQ(evalstr);
return 0;
}
Затем выполните обычную процедуру отладки программы на C ++ с помощью gdb, установив точки останова в function_under_test()
и т. Д.
Таким образом, вы избегаете переключения между средами разработки R и C ++ и необходимости переустанавливать пакет R.