Я написал программу 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)
my demo2.cpp
is :
#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 Выполнение остановлено
На самом деле, я хочу решить проблему медленности цикла for
R. У меня есть программа R с большим циклом for
, которая выполняется очень медленно. Итак, я хочу изменить этот цикл for
с кода R на код C++. В цикле for
я вызываю множество функций R. Итак, мне нужно вызвать из кода C++ программу R. Таким образом, порядок от R до C++ до R, то есть от R до Rcpp в Rinside, я ошибаюсь?
Почему?