rcpp - 在 Rcpp 函数中停止(作为包的一部分)以调试模式结束
问题描述
我正在测试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);
}
的输出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
. 任何人都可以提供一个明智的意见,至于哪个是首选?谢谢你。
解决方案
第二个问题: 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。
推荐阅读
- google-sheets - Google 电子表格中的动态减法
- c# - $http.get 不返回值
- java - 使用嵌套对象和列表反序列化 JSON。“JSON 解析错误:无法构造”
- c# - StaTypPocoQueries 不适用于 PetaPoco 流式配置
- php - 工作两年后 LOAD DATA LOCAL INFILE 突然出现 MYSQL“格式错误的数据包”
- javascript - 使用javascript'class'声明时如何设置'_this'或'self'
- python - 清理打印命令
- c# - 将编辑器模板中的多个表单之一提交到控制器操作
- python-3.x - 如何将两个列表的元素打印在一起
- javascript - 使用 Google Cloud Search 对网站进行隐式 Google API 授权