2013-05-28 3 views
2

Как проверить, является ли значение числовым и конечным? Скажем, я генерирую случайные числа с помощью Rf_rgamma или своей собственной рутиной. В зависимости от параметров могут возникать ошибки. Как я могу проверить, что внутри C и разрыв цикла и всей функции в этом событии?Обработка ошибок в Rcpp

И как я могу проверить, есть ли вектор, скажем, arma :: vec из RcppArmadillo, содержит только числовые и конечные значения?

Я знаю, это общие вопросы. Однако моя конкретная проблема требует нескольких минут для воспроизведения, и я не смог создать минимальный пример. В большинстве случаев моя функция работает нормально, всего за 1 100 000 раз она приводит к сбою R.

ответ

3

Вот один из способов: проверить каждый элемент. Простая демонстрационная версия:

R> cppFunction('int checker(double x) { return ::R_finite(x);} ') 
R> checker(2) 
[1] 1 
R> checker(0) 
[1] 1 
R> checker(NaN) 
[1] 0 
R> checker(Inf) 
[1] 0 
R> 
+0

Спасибо. Это важный материал. – Inferrator

+1

Да, на самом деле Romain что-то передал нашему SVN, чтобы обеспечить его непосредственно как функцию сахара, поэтому он будет работать на целых векторах одновременно. –

+0

BTW благодарит за принятие ответа. Вы также можете приспособиться к этому, если считаете, что это достойно голосования. Я просто задал ваш вопрос, так как этого не было в нашем API - так спасибо! –

Смежные вопросы