在Windows上使用RStudio中的Rcpp时出现致命错误

时间:2015-12-18 07:41:36

标签: r windows rcpp

我试图在RStudio的Windows上使用Rcpp。我有R版本3.2.3,我已经安装了Rcpp软件包。问题是我无法调用通过CPP代码定义的任何函数。我尝试了以下内容(从在线示例中获取)。

body <- '
NumericVector xx(x);
return wrap( std::accumulate( xx.begin(), xx.end(), 0.0));'
add <- cxxfunction(signature(x = "numeric"), body, plugin = "Rcpp")

这会发出以下警告,但会成功完成执行。

cygwin warning:
MS-DOS style path detected: C:/R/R-32~1.3/etc/x64/Makeconf
Preferred POSIX equivalent is: /cygdrive/c/R/R-32~1.3/etc/x64/Makeconf
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

当我尝试使用上述功能时,

x <- 1
y <- 2
res <- add(c(x, y))

我收到以下错误:

R Session Aborted
R encountered a fatal error.
The session was terminated.

有什么建议吗?同样的致命错误&#39;适用于我使用Rcpp运行的任何代码。

1 个答案:

答案 0 :(得分:1)

尝试从Rcpp开始本地重建。这是有效的代码并且可以工作(并且数百个单元测试压力可能超过这个)。有时编译器或其他东西会在你下面发生变化,这种情况会发生。然后有一个替代的构建系统是有用的 - 例如通过GitHub上的Travis你可以免费获得Linux。

另外,了解Rcpp属性。您的示例可以写为

R> library(Rcpp)
R> cppFunction("double adder(std::vector<double> x) { return std::accumulate(x.begin(), x.end(), 0.0); }")
R> adder(c(1,2))
[1] 3
R> 

更简单。当然与Rcpp::NumericVector的工作方式相同。