我正在测试stop包 using 中的使用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);
}
Run Code Online (Sandbox Code Playgroud)
的输出takeLog3(-10)是
> takeLog3(-10)
Error in takeLog3(-10) : Inadmissible value
Called from: takeLog3(-10)
Browse[1]>
Run Code Online (Sandbox Code Playgroud)
然后我必须输入Q退出调试模式。我的问题是,这是预期的行为吗?其次,如何stop声明不进入调试模式,而是在显示stop消息后完全退出该功能?
请注意,当takeLog3包含在包中时,我会看到此行为。当我在一个简单.cpp文件中的包外使用此函数时,我没有看到这种行为,其中该函数仅显示stop消息并且控制返回到控制台但不进入调试模式。
任何帮助将不胜感激!
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>
Run Code Online (Sandbox Code Playgroud)
Ubuntu 18.10,R 3.6.0。
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |