C++与R交互

来源:互联网 发布:网络印刷电商平台 编辑:程序博客网 时间:2024/05/21 19:19


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

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

#include <iostream>#include <vector>#include <RInside.h>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<double>(R.parseEval(cmdStr));//将R命令结果解析赋值给d1    cout << "d1 = " << d1 << endl;    cmdStr = "str <- \"Hello World!\"";    string str = Rcpp::as<string>(R.parseEval(cmdStr));//将R命令结果解析赋值给str    cout << "str = " << str << endl;    cmdStr = "b <- FALSE";    bool b = Rcpp::as<bool>(R.parseEval(cmdStr));    cout << boolalpha << "b = " << b << endl;    cout << "******* test R vector *******" << endl;    cmdStr = "M <- c(1.0*1:6)";    vector<double> d2Vec = Rcpp::as< vector<double> >(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<double> d3Vev = Rcpp::as< vector<double> >(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<string>(myList["name"]) << endl;    cout << "myList[\"wife\"] = " << Rcpp::as<string>(myList["wife"]) << endl;    cout << "myList[\"no.child\"] = " << Rcpp::as<int>(myList["no.child"]) << endl;    Rcpp::IntegerVector ageIntVec = Rcpp::as<Rcpp::IntegerVector>(myList["child.ages"]);    cout << "ageIntVec[0] = " << ageIntVec[0] << endl;    cout << "ageIntVec[1] = " << ageIntVec[1] << endl;    cout << "ageIntVec[2] = " << ageIntVec[2] << endl;    return 0;}

0 0
原创粉丝点击