在 Rcpp 函数中停止(作为包的一部分)在调试模式下结束
stop in Rcpp function (as a part of a package) ends in debug mode
我正在使用 Rcpp
测试包中 stop
的使用,我发现当使用 stop
时,函数在 R
中退出并进入调试模式.例如,我在 link 处使用示例函数(参见 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
消息并控制 returns 返回控制台但是不会进入调试模式。
非常感谢任何帮助!
PS:我刚刚发现使用 Rf_error
而不是 stop
可以获得我需要的行为。任何人都可以提供一个明智的意见,至于哪个是首选?谢谢。
第二个问题:stop()
调用 Rf_error()
来实现您看到的行为。
第一个问题:您最终进入调试器是因为 IDE(您没有提及或提及)想要提供帮助。在标准 R shell:
的命令行上尝试
R> Rcpp::cppFunction("bool myStop(std::string reason) { Rcpp::stop(reason); }")
R> myStop("tired")
Error in myStop("tired") : tired
R>
Ubuntu 18.10, R 3.6.0.
我正在使用 Rcpp
测试包中 stop
的使用,我发现当使用 stop
时,函数在 R
中退出并进入调试模式.例如,我在 link 处使用示例函数(参见 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
消息并控制 returns 返回控制台但是不会进入调试模式。
非常感谢任何帮助!
PS:我刚刚发现使用 Rf_error
而不是 stop
可以获得我需要的行为。任何人都可以提供一个明智的意见,至于哪个是首选?谢谢。
第二个问题:stop()
调用 Rf_error()
来实现您看到的行为。
第一个问题:您最终进入调试器是因为 IDE(您没有提及或提及)想要提供帮助。在标准 R shell:
的命令行上尝试R> Rcpp::cppFunction("bool myStop(std::string reason) { Rcpp::stop(reason); }")
R> myStop("tired")
Error in myStop("tired") : tired
R>
Ubuntu 18.10, R 3.6.0.