使用Rcpp找不到消息错误“C:/ Program”

时间:2013-09-22 13:54:48

标签: r rcpp

我正在运行64位Windows 7平台。

我已添加到已安装的程序/库中:

  • Rtools

  • R(软件)

  • Rcpp(R package)

  • 内联(R包)

我尝试了一个代码段here

## now with Rcpp and C++
library(inline)
# and define our version in C++
src <- "int n = as<int>(ns);
double x = as<double>(xs);
for (int i=0; i<n; i++) x=1/(1+x);
return wrap(x); "
l <- cxxfunction(signature(ns="integer", xs="numeric"),
body=src, plugin="Rcpp")

但这不起作用(说实话并不奇怪,因为我甚至没有指定例如Rtools的位置)。我收到以下错误消息:

Error in system(cmd, intern = !verbose) : 'C:/Program' not found

我不确定这意味着什么。而且,我已经被困在那里几个小时了。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

R on Windows FAQ在问题2.2中说:

  

如果您希望能够从源代码构建软件包,我们建议您这样做   选择不包含空格的安装路径。

另见FAQ的问题2.16。我相当肯定我们也在Rcpp文档中反复提到这一点。

现在,如果您放弃内联包,并尝试使用RStudio,那么您可能会解决这个问题(因为需要更多努力来保护带有空格的$PATH)。

但简而言之,我会重新安装R,比如C:\R\R-$version,因为这是获得所有示例默认行为的唯一方法。而且我们有很多。值得重新安装。

答案 1 :(得分:0)

根据nograpes建议我得到:

>> setting environment variables: 
PKG_LIBS =  C:/Users/ (...) /DOCUME~1/R/WIN-LI~1/3.0/Rcpp/lib/x64/libRcpp.a

>> LinkingTo : Rcpp
CLINK_CPPFLAGS =  -I"C:/Users/  (...)  /Documents/R/win-library/3.0/Rcpp/include" 

>> Program source:

1 : 
2 : // includes from the plugin
3 : 
4 : #include <Rcpp.h>
5 : 
6 : 
7 : #ifndef BEGIN_RCPP
8 : #define BEGIN_RCPP
9 : #endif
10 : 
11 : #ifndef END_RCPP
12 : #define END_RCPP
13 : #endif
14 : 
15 : using namespace Rcpp;
16 : 
17 : 
18 : // user includes
19 : 
20 : 
21 : // declarations
22 : extern "C" {
23 : SEXP file47844fc6c7a( SEXP ns, SEXP xs) ;
24 : }
25 : 
26 : // definition
27 : 
28 : SEXP file47844fc6c7a( SEXP ns, SEXP xs ){
29 : BEGIN_RCPP
30 : int n = as<int>(ns);
31 : double x = as<double>(xs);
32 : for (int i=0; i<n; i++) x=1/(1+x);
33 : return wrap(x); 
34 : END_RCPP
35 : }
36 : 
37 : 

Compilation argument:
 C:/Program Files/R-3.0.1/bin/x64/R CMD SHLIB file47844fc6c7a.cpp 2>         file47844fc6c7a.cpp.err.txt 
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
  cannot open file 'file47844fc6c7a.cpp.err.txt': No such file or directory

但是,我承认这对我帮助不大。