Я тестирую использование stop
в пакете с использованием Rcpp
и вижу, что при использовании stop
функция выходит в режим отладки в R
. Например, я использую пример функции по ссылке (см. Также функцию takeLog3
, также вставленную ниже)
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double takeLog3(double val) {
if (val <= 0.0) { // log() not defined here
stop("Inadmissible value");
}
return log(val);
}
Выход takeLog3(-10)
равен
> takeLog3(-10)
Error in takeLog3(-10) : Inadmissible value
Called from: takeLog3(-10)
Browse[1]>
и затем я должен ввести Q
, чтобы выйти из режима отладки. Мой вопрос, это ожидаемое поведение? Во-вторых, как мне сделать оператор stop
, чтобы не переходить в режим отладки, а полностью выйти из функции после отображения сообщения stop
?
Обратите внимание, что я вижу это поведение, когда takeLog3
включен в пакет. Я не вижу такого поведения, когда у меня есть эта функция вне пакета в простом файле .cpp
, где функция просто показывает сообщение stop
и управление возвращается обратно в консоль, но НЕ переходит в режим отладки.
Любая помощь будет принята с благодарностью!
PS: Я только что обнаружил, что получаю нужное мне поведение, используя Rf_error
вместо stop
. Может ли кто-нибудь дать обоснованное мнение относительно того, какой из них предпочтительнее? Спасибо.