2

我已经安装了 R 以及这两个包 Rcpp 和 inline。(我正在做一个项目,该项目包括在 R 中加速一个非常缓慢的程序,我决定使用 Rcpp)......我知道我做错了什么......可能错过了一个步骤,但我无法弄清楚。如果您正在阅读本文,请向 Dirk 推荐!感谢 Rcpp 和全新的内联包 pdf 但是......它仍然没有运行。请注意,我是新手。如前所述,我清除了所有其他软件包,并且仅使用 Rcpp 和内联安装了 R(当然我也安装了 c++)。

    library(Rcpp)
    library(inline)
    x<-as.numeric(1:10)
    n<-as.integer(10)
    code<-"
    integer i 
    do 1 i=1, n(1)
    1 x(i)=x(i)**3
    "
    cubefn<-                       cfunction(signature(n="integer",x="numeric"),code,convention=".Fortran")
     ERROR(s) during compilation: source code errors or   compiler      configuration errors!
                Program source:
      1: #include <R.h>
      2: 
      3: 
      4: extern "C" {
      5:   void filef2424e34d61 ( int * n, double * x );
      6: }
      7: 
      8: void filef2424e34d61 ( int * n, double * x ) {
      9: 
     10: integer i
     11: do 1 i=1, n(1)
     12: 1 x(i)=x(i)**3
     13: 
     14: }
    Error in compileCode(f, code, language, verbose) : 
      Compilation ERROR, function(s)/method(s) not created! 
    In addition: Warning message:
    running command 'C:/R/R-2.15.2/bin/x64/R CMD SHLIB filef2424e34d61.cpp 2> filef2424e34d61.cpp.err.txt' had status 1 

如果是缺少包骨架的构造:我尝试了简单的 rcpp_hello_world() 示例:

    rcpp_hello_world <- function(){

    .Call( "rcpp_hello_world", PACKAGE = "mypackage" )
    }

    Folder PATH listing for volume OS
    Volume serial number is 769C-A616
    C:.

剩下的是一长串奇怪的符号,但我能读到的是我拥有的 c++ 项目的名称,我没有包括它们,因为它太长了

    rcpp_hello_world <-function(){

    .Call("rcpp_hello_world",PACKAGE="mypackage")

    }

    rcpp_hello_world()

    Error in .Call("rcpp_hello_world", PACKAGE = "mypackage") : 
      "rcpp_hello_world" not available for .Call() for package "mypackage"

任何事情都会有所帮助,我也安装了 linux,所以如果这是一个更好的选择,请告诉我。我现在对任何事情都持开放态度,一点点进步都是一种喜悦

4

1 回答 1

1

你真的安装了 Fortran 编译器吗?

如果你不知道,或者你不知道,试试你的 Linux 机器。如果要使用 Rcpp 和内联构建, Windows 上的 R必须能够编译源包。一个好的快速测试是尝试类似的东西

R> myroot <- cppFunction('double myroot(double x) { return ::sqrt(x); }')
R> myroot(16)
[1] 4
R> 

或等效地通过内联(调用rcpp的包装器在哪里cxxfunction(..., plugin="Rcpp"),您需要最新的内联包)

R> myroot2 <- rcpp(signature(xs="numeric"), 
+                  body='double x=as<double>(xs); return wrap(::sqrt(x));')
R> myroot2(16)
[1] 4
R> 

如果这不起作用,请阅读安装 Rtools for Windows 等的 R 基础知识。我们在 Rcpp 常见问题解答中还有一些附加说明。

于 2013-02-18T15:26:44.900 回答