我安装了R以及这两个包Rcpp和内联。 (我正在做一个项目,包括加速R中一个痛苦缓慢的程序,我决定使用Rcpp)...我知道我做错了什么......可能错过了一步,但我无法弄明白。如果你正在阅读这篇文章,请向Dirk道具!感谢Rcpp和全新的内联软件包pdf,但......它还没有运行。 请注意我是新手。如前所述,我清理了所有其他软件包,只有R安装了Rcpp和内联(当然我也安装了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,所以如果这是一个更好的选择,请告诉我。我现在对任何事情持开放态度,最轻微的进步令人高兴
答案 0 :(得分: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 FAQ中还有一些其他说明。