Вот код:Почему утверждение не работает здесь?
#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();
std::cout << nx << '\n' << ny << std::endl;
assert(nx == ny);
double dist=0;
for(int i = 0; i < nx; i++) {
dist += pow(x[i] - y[i], 2);
}
return sqrt(dist);
}
После поиска его в R, я получаю следующий результат, по-видимому, не прервать, если есть ошибка:
#////////////////////////////////////////////////////
sourceCpp('x.cpp')
#////////////////////////////////////////////////////
eudist(c(0, 0), c(1, 1))
2
2
[1] 1.4142
#////////////////////////////////////////////////////
eudist(c(0, 0), c(1, 1, 1))
2
3
[1] 1.4142
Как вы это компилируете? 'assert' будет удален препроцессором, если вы определите' NDEBUG'; это, наверное, то, что происходит. –
Три ура и надпись для переключения на 'throw()' –
О, и быть приверженцем: используйте 'Rcpp :: Rcout' вместо' std :: cout' для записи в буферы ввода/вывода R. –