当RCPP程序无法正常运行时,有没有办法阻止RGui崩溃?

时间:2018-09-21 12:06:30

标签: c++ r rcpp

我正在使用Rcpp使用RGui(版本3.4.1)作为用户界面运行C ++代码。我经常对C ++代码进行更改,这些更改可以正确编译,但是在RGui中运行相关程序时会导致错误(例如,搜索超出数组末尾),从而导致RGui崩溃。之所以如此,是因为我必须重新打开RGui,重新打开R脚本(有时会丢失未保存的更改),再次设置工作目录等,这样才能使我重新编译C ++代码并以这种方式运行程序查找问题或测试修订的方法。有时由于我没有解决或绕过该问题,它立即再次崩溃。

是否有某种方法可以更改Rcpp的运行方式,以使RGui返回错误消息而不是在这种情况下崩溃?

2 个答案:

答案 0 :(得分:4)

简而言之:

  1. 它的拼写为Rcpp。大写R,小写cpp。
  2. 是的,没有错误:)
  3. 通常,2.是唯一可行的答案。如果需要托管语言,请使用R。
  4. 如果代码使您的环境无法正常运行,请在环境之外进行测试。说真的例如,这就是为什么我(共同)编写littler并在命令行上测试“原始代码”的原因:它只能关闭命令行应用程序。
  5. 我们 do 在RcppArmadillo中具有一项功能,用于测试“超出范围”的向量访问:使用x.at(i,j)会发出警告。参见http://arma.sourceforge.net/docs.html#element_access

答案 1 :(得分:1)

我实际上不知道有什么方法可以防止这种情况的发生,因为要进行更仔细的编程,并在执行前进行保存。但是做了几次之后,我发现了一种方法来找回未保存的更改(至少在Windows中)。

当您看到提示您重新启动R的弹出窗口时,您无需这样做。您打开任务管理器,右键单击该进程,然后选择“创建转储文件”。在资源管理器中找到此文件,然后使用一些文本编辑器将其打开。

它们很大,并且充满了各种各样的东西,但是如果您使用find函数搜索一些您知道在脚本中存在的字符串,那么您可以找到所有未保存的工作。然后,您可以将其复制并粘贴到另一个文件中进行保存。

如果使用R-studio而不是R-GUI,通常可以更好地照顾未保存的工作。