Here is the code:
#include
#include
#include
#include
using namespace Rcpp;
// [[Rcpp::ex
Note that assert()
etc are explicitly prohibited for CRAN uploads. Quoting from the CRAN Repo Policy page:
The code and examples provided in a package should never do anything which might be regarded as malicious or anti-social. The following are illustrative examples from past experience.
- Compiled code should never terminate the R process within which it is running. Thus C/C++ calls to
assert
/abort
/exit
, Fortran calls toSTOP
and so on must be avoided. Nor may R code callq()
.
So the answer about debug mode is technically correct, but also note that you are not supposed to use this if you plan to upload CRAN at some point.
For g++ use -g to enable debug options:
g++ -g code.cpp
Or debug mode in Visual Studio.
The problem is solved by using throw
instead of assert
, Rcpp will actually put things in a proper try-catch block, which is super nice.
#include <Rcpp.h>
#include <iostream>
#include <assert.h>
#include <stdio.h>
using namespace Rcpp;
// [[Rcpp::export]]
double eudist(NumericVector x, NumericVector y) {
int nx = x.size();
int ny = y.size();
Rcout << nx << '\n' << ny << std::endl;
if(nx != ny) {
throw std::invalid_argument("Two vectors are not of the same length!");
}
double dist=0;
for(int i = 0; i < nx; i++) {
dist += pow(x[i] - y[i], 2);
}
return sqrt(dist);
}