xuyanzc 发表于 2017-3-28 09:44:19

RCPP与Rinside混用问题

由于R语言的FOR循环效率问题,最近想把循环改为C++版本,思路如下:
最外围程序是R,执行语句中FOR循环部分用RCPP,C++改写,FOR循环内部还需要调用R的函数,因此又要用到Rinside,在Rinside里再调用原来的R函数。示例代码如下:
more demo.r

library(Rcpp)
aa <- function(xx)
{
   return(xx)
}
sourceCpp(file='demo1.cpp')
ddd <- hello1("ccc")
print(ddd)


# more demo1.cpp
#include <Rcpp.h>
#include <string>
#include <RInside.h>

using namespace std;
using namespace Rcpp;

//[]

string hello1(string dd)
{

RInside R();      
R["txt"] = "Hello, world!\n";   
Rcpp::Character xxx = R.parseEvalQ("aa(txt)");

return xxx;
}


执行,出错,确实不太熟悉这个流程怎么做,各位大侠帮助下哦,多谢
Rscript demo.r
demo1.cpp: In function ?.td::string hello1(std::string)?.
demo1.cpp:14:10: error: invalid types ?.Inside()]?.for array subscript
   R["txt"] = "Hello, world!\n";   
          ^
demo1.cpp:15:3: error: ?.haracter?.is not a member of ?.cpp?
   Rcpp::Character xxx = R.parseEvalQ("aa(txt)");
   ^
demo1.cpp:15:19: error: expected ?.?.before ?.xx?
   Rcpp::Character xxx = R.parseEvalQ("aa(txt)");
                   ^
demo1.cpp:17:10: error: ?.xx?.was not declared in this scope
   return xxx;
          ^
make: *** Error 1
g++ -I/usr/local/lib64/R/include -DNDEBUG-I/home/data2/daqi/zlib-1.2.8/include -I/home/data2/daqi/bzip2-1.0.6/include -I/home/data2/daqi/xz-5.2.2/include -I/home/data2/daqi/pcre-8.39/include -I/home/data2/daqi/curl-7.51.0/include-I"/usr/local/lib64/R/library/Rcpp/include" -I"/home/xuyan/R/parallel"   -fpic-g -O2-c demo1.cpp -o demo1.o
Error in sourceCpp(file = "demo1.cpp") :
Error 1 occurred building shared library.
Execution halted


页: [1]
查看完整版本: RCPP与Rinside混用问题