C++与R交互



C++与R语言的交互,使用RInside包

下面记录C++调用R数据测试(主要参考RInside中附带的examples):

#include 
#include 
#include 
using namespace std;
int main(int argc,char* argv[])
{
    RInside R(argc,argv);//创建一个R环境
    string cmdStr;//R命令行变量
    cout << "******* test R basic data type *******" << endl;
    cmdStr = "m <- 1.23";
    double d1 = Rcpp::as(R.parseEval(cmdStr));//将R命令结果解析赋值给d1
    cout << "d1 = " << d1 << endl;
    cmdStr = "str <- \"Hello World!\"";
    string str = Rcpp::as(R.parseEval(cmdStr));//将R命令结果解析赋值给str
    cout << "str = " << str << endl;
    cmdStr = "b <- FALSE";
    bool b = Rcpp::as(R.parseEval(cmdStr));
    cout << boolalpha << "b = " << b << endl;

    cout << "******* test R vector *******" << endl;
    cmdStr = "M <- c(1.0*1:6)";
    vector d2Vec = Rcpp::as< vector >(R.parseEval(cmdStr));//将R命令向量赋值转换到C++的vector中
    cout << "d2Vec[0] = " << d2Vec[0] << endl;
    cout << "d2Vec[1] = " << d2Vec[1] << endl;
    cout << "d2Vec[2] = " << d2Vec[2] << endl;
    cout << "d2Vec[3] = " << d2Vec[3] << endl;
    cout << "d2Vec[4] = " << d2Vec[4] << endl;
    cout << "d2Vec[5] = " << d2Vec[5] << endl;

    cout << "******* test R matrix *******" << endl;
    cmdStr = "M <- matrix(1:6,2,3)";//创建矩阵
    vector d3Vev = Rcpp::as< vector >(R.parseEval(cmdStr));
    cout << "d3Vev[0] = " << d3Vev[0] << endl;
    cout << "d3Vev[3] = " << d3Vev[3] << endl;
    cout << "d3Vev[5] = " << d3Vev[5] << endl;

    cout << "******* test R list *******" << endl;
    cmdStr = "lst <- list(name = \"Fred\",wife = \"Mary\",no.child = 3,child.ages = c(12,15,17))";//创建列表数据
    Rcpp::List myList= R.parseEval(cmdStr);
    cout << "myList[\"name\"] = " << Rcpp::as(myList["name"]) << endl;
    cout << "myList[\"wife\"] = " << Rcpp::as(myList["wife"]) << endl;
    cout << "myList[\"no.child\"] = " << Rcpp::as(myList["no.child"]) << endl;
    Rcpp::IntegerVector ageIntVec = Rcpp::as(myList["child.ages"]);
    cout << "ageIntVec[0] = " << ageIntVec[0] << endl;
    cout << "ageIntVec[1] = " << ageIntVec[1] << endl;
    cout << "ageIntVec[2] = " << ageIntVec[2] << endl;
    return 0;
}

你可能感兴趣的:(R)