Rcpp实现R与C++的无缝连接
2013-11-22 11:26
417 查看
R的for循环非常慢,当看见这句话时:Thanks to the abstractions provided by Rcpp, the code implementing gibbs in C++ is nearly identical to the code you’d write in R, but runs 20 times faster.采用Rcpp实现R和C++的无缝连接是非常有必要的,至少从效率上讲。下面简单的介绍下我的初步成果:
首先在R里面安装包Rcpp:install.packages('Rcpp')
然后编写自己的c++文件,假设在Rstudio里面编写c/c++ script 如下:一个简单的循环输出循环变量程序
假设上面的程序保存为test.cpp,然后在R里先加载包library(Rcpp),载在R里运行命令:sourceCpp("test.cpp") 就会有输出结果了,注意这里假设test.cpp位于R的工作目录下,若不在R的工作目录下可以在test.cpp前加上路径,如:sourceCpp("../../../test.cpp")。
若是在Rstudio里面的话还有个更简单的方法:在窗口内写c/c++ script后同时按:ctrl+shift+enter后会自动运行脚本。
这里只是编写的c/c++程序为什么会有输出呢?这是因为test.cpp的最后几句:/*** R 后那几句是R脚本程序,这里相当于执行gibbs(3,1)函数,那个/*** R格式是固定的,改了后会报错~
首先在R里面安装包Rcpp:install.packages('Rcpp')
然后编写自己的c++文件,假设在Rstudio里面编写c/c++ script 如下:一个简单的循环输出循环变量程序
#include <Rcpp.h>//必须的头文件 using namespace Rcpp; // [[Rcpp::export]] void gibbs(int N, int thin) { for(int i = 0; i < N; i++) { for(int j = 0; j < thin; j++) { std::cout<<i<<" "<<j<<std::endl;//可以在前面using namespace std; } } //return(N);//可以定义返回值和函数返回值相同然 } //下面是R脚本程序 /*** R #格式非得这样:/*** R gibbs(3,1) */脚本输出:
0 0 1 0 2 0
假设上面的程序保存为test.cpp,然后在R里先加载包library(Rcpp),载在R里运行命令:sourceCpp("test.cpp") 就会有输出结果了,注意这里假设test.cpp位于R的工作目录下,若不在R的工作目录下可以在test.cpp前加上路径,如:sourceCpp("../../../test.cpp")。
若是在Rstudio里面的话还有个更简单的方法:在窗口内写c/c++ script后同时按:ctrl+shift+enter后会自动运行脚本。
这里只是编写的c/c++程序为什么会有输出呢?这是因为test.cpp的最后几句:/*** R 后那几句是R脚本程序,这里相当于执行gibbs(3,1)函数,那个/*** R格式是固定的,改了后会报错~
相关文章推荐
- C语言字符串拷贝和连接小技巧(可避免内存不足的问题)
- 实现字符串(char*)的前N个字符放到后面
- c++ string 用法详解
- C++类的私有成员变量和函数的隐藏
- Accelerated C++ Exercise 11-0(自定义VECTOR模板)
- C语言序列点问题总结(大多数高等教育C语言教学课程的漏洞)
- 使你的C/C++代码支持Unicode
- C++中构造函数的那点事
- Google C++测试框架系列入门篇:第二章 开始一个新项目
- C++类构造函数初始化列表(详解)
- C++语言中类的成员变量初始化(转…
- C++电话面试
- c/c++通过socket发送结构体
- C++--深入分析MFC文档视图结构(项…
- C++指针和引用的区别
- C语言中的typeof关键字
- C++中那些不常用的关键字
- C++的头文件和实现文件分别写什么…
- C++的头文件和实现文件分别写什么&amp;…
- C++文件读(逐行读、逐单词读)