4

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

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

  • 工具

  • R(软件)

  • Rcpp(R 包)

  • 内联(R 包)

我尝试了一个在这里找到的片段

## 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

我不确定那是什么意思。而且,我已经被困在那里几个小时了。谁能帮帮我,好吗?

4

2 回答 2

3

R on Windows FAQ在问题 2.2 中说:

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

另请参阅该常见问题解答的问题 2.16。我相当肯定我们也在 Rcpp 文档中反复强调了这一点。

现在,如果你放弃 inline 包,并尝试在 RStudio 中工作,那么你可能会解决这个问题(因为有更多的努力来保护$PATHwith 空格)。

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

于 2013-09-22T18:07:28.527 回答
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

但是,我承认这对我没有多大帮助。

于 2013-09-22T14:23:59.007 回答