我写了一个调用R程序hello1()
,它是程序中包含的Rcpp函数demo2.cpp
library(Rcpp)
ssss <- function(dd)
{
return(paste("hello ",dd))
}
sourceCpp(file='demo2.cpp')
currentpath <- "/home/xuyan/R/parallel/"
aaa <-hello1(0,currentpath)
print(aaa)
我demo2.cpp
的是:
#include <Rcpp.h>
#include <string>
#include <RInside.h>
using namespace std;
using namespace Rcpp;
// [[Rcpp::export]]
int hello1(int argc,string path)
{
const char *argv[] = {path.c_str()};
RInside R(argc,argv);
R["txt"] = "Hello, world!\n";
R["sourcer"] = "demo.r";
R.parseEvalQ("source(sourcer)");
string str = Rcpp::as<string>(R.parseEval("ssss(txt)"));
cout << "result is" << str << endl;
return(111);
}
我尝试使用以下命令启动此脚本:
Rscript demo.r
我收到以下错误:
dyn.load 中的错误(“/tmp/RtmpZl0JKp/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_90cc33eafd15/sourceCpp_2.so”):无法加载共享对象'/tmp/RtmpZl0JKp/sourceCpp-x86_64-pc -linux-gnu-0.12.10/sourcecpp_90cc33eafd15/sourceCpp_2.so':/tmp/RtmpZl0JKp/sourceCpp-x86_64-pc-linux-gnu-0.12.10/sourcecpp_90cc33eafd15/sourceCpp_2.so:未定义符号:_ZN7RInsideD1Ev 调用:sourceCpp-> source -> withVisible -> eval -> eval -> dyn.load 执行停止
事实上,我想解决Rfor
循环的缓慢问题。我有一个R程序,它有一个大for
循环,执行速度非常慢。所以,我想将该for
循环从R更改为C++代码。在for
循环中,我调用了许多R函数。所以,我需要从C++代码调用R程序。因此,顺序是R到C++到R,即R到Rcpp到Rinside,我错了吗?
为什么?