博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++与R交互(RInside)
阅读量:7080 次
发布时间:2019-06-28

本文共 2932 字,大约阅读时间需要 9 分钟。

hot3.png

一、C++代码1.cpp

#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包

$ R

> install.packages("Rcpp")

> install.packages("Rcpp11")

> install.packages("RInside")

这里R的扩展包都安装在/usr/local/lib/R/site-library/。如普通用户没有对该目录写的权限,

执行chmod a+rw /usr/local/lib/R/site-library

为了方便g++找到对应的库建立软链接:

sudo ln -s /usr/local/lib/R/site-library/RInside/lib/libRInside.so /usr/lib/libRInside.so

sudo ldconfig -v

三、编译:

g++ -I /usr/local/lib/R/site-library/RInside/include -I /usr/local/lib/R/site-library/Rcpp/include -I /usr/share/R/include 1.cpp -lR -lRInside

四、运行:

$ ./a.out ******* test R basic data type *******d1 = 1.23str = Hello World!b = false******* test R vector *******d2Vec[0] = 1d2Vec[1] = 2d2Vec[2] = 3d2Vec[3] = 4d2Vec[4] = 5d2Vec[5] = 6******* test R matrix *******d3Vev[0] = 1d3Vev[3] = 4d3Vev[5] = 6******* test R list *******myList["name"] = FredmyList["wife"] = MarymyList["no.child"] = 3ageIntVec[0] = 12ageIntVec[1] = 15ageIntVec[2] = 17

 

转载于:https://my.oschina.net/u/2245781/blog/1490729

你可能感兴趣的文章
tomcat启动报错Invalid character found in method name. HTTP method names must be tokens
查看>>
appium+python3.6
查看>>
RAID cache的作用及更换RAID 电池注意事项
查看>>
如何挖掘和优化长尾关键词?
查看>>
windows下安装解压版mysql
查看>>
Linux启用ssh服务
查看>>
Centos7 Snapper快照备份
查看>>
cdn
查看>>
每一天的成长由此开始
查看>>
swift开发中如何将时间显示为几分钟前、几小时前、几天前、几个月前
查看>>
某店订单系统水平分库的实践之路以及关键步骤
查看>>
Oracle GoldenGate 快速安装配置实用指南
查看>>
我的友情链接
查看>>
iOS 图片合并 及截图
查看>>
easyui datagrid load 方法键不能为变量的解决
查看>>
分治的一次简单实践
查看>>
博为峰Java面试题-JavaSE I/O之File写入读出
查看>>
USER username (Login failed): Invalid shell: '/bin/false'
查看>>
我的友情链接
查看>>
Linux下整合Apache和Tomcat
查看>>