前面博客中有提及,当我们进行模拟想要再次进行提速时,通常都会使用Rcpp将我们的R代码改成C++代码。具体Rcpp的使用可参考博客:让你的R代码更快——Rcpp入门,利用RcppEigen进行矩阵运算。

平时在我们使用的时候,直接使用Rcpp::sourceCpp()就可以直接将我们的C++代码中的函数进行导入,这不会遇到什么问题,但如果我们想要使用snowfall进行并行时就不能再这样做了。遇到的问题在博客中有进行说明:R中两种常用并行方法——2. snowfall。

而解决这个问题的有效途径,就是将我们的Rcpp代码进行打包,然后再对包进行调用。下面我们就来介绍:如何使用RStudio制作包含Rcpp代码的R包。


1. 创建项目

首先我们进入RStudio,然后选择左上角的FileNew Project

![新建项目](https://img-blog.csdn.net/20180831193949279?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkyOTUyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

新建Project后会得到如下图所示的界面,我们接着选New Directory

再选择R Package

最后在得到如下所示的界面后,我们在Package Name中输入我们包的名称,然后再在下面选择Add,将我们的.cpp格式的C++文件选择进去(里面是我们的函数)。最后点击Create package,即可创建一个R包的project了。

创建完之后,RStudio会弹出一个新的界面,如下图所示。

然后我们需要对下述界面里面的一些配置文件进行一定的修改,然后才能完善我们的R包。


2. 修改一些文件

从上面界面的右下角的Files框框中,可以发现已经多出了很多文件,包括DISCRIPTION等文件以及manRsrc三个文件夹。

R文件夹中存的是R代码,src文件夹中是C++代码(包括我们之前添加的C++代码)。

可能你的C++代码中只有添加进去.cpp文件,由于我的代码中不止使用了#include <Rcpp.h>,还有使用#include <RcppEigen.h>,这里注意,一定需要在DISCRIPTION文件的最后添加下面两行(尤其是LinkingTo,不然会编译失败):

Imports: Rcpp
LinkingTo: Rcpp, RcppEigen

此外还可以在DISCRIPTION文件,添加一些作者姓名等一些重要信息。

直接点开DISCRIPTION文件,会如上图所示,我们直接进行修改即可。这里需要注意一下,Imports里面涉及到软件的版本,是根据你R中现有包的版本来,如果想让更多的电脑使用,在不影响程序使用的前提下,可以适当降低依赖包的版本。


3. 打包

最后一步就是打包,这里介绍两种打包方式:

  1. 选择上方的Build——Build Source Package

  1. 点击右上角的Build中的Build & Reload

第一种方法打包成功后,当下面出现DONE字样时,说明包会在默认路径下安详地躺着了。
第二种方法打包成功后会自动library载入。


4. 使用Eigen或其它依赖库会出现的问题

如果我们再.cpp文件中使用的不止有Rcpp库,还有别的库,比如说Eigen。这时需要注意,用上面的方法打包是失败的,会显示没有Eigen这个库。

这个解决的方法也很简单,直接在DISCRIPTION文件的LinkTo后面加上RcppEigen即可,如下图所示:


可能遇到的其他问题

  • 制作R包后载入包内函数时,出现 “…” not available for .Call() for package “…” 错误

最后,就可以开心地享用新鲜出炉的包来做snowfall并行或者发给别人使用啦!

RStudio制作包含Rcpp代码的R包相关推荐

  1. 如何制作自己的R包?

    摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的 ...

  2. 进阶必看 | R包制作指南-windows系统

    R包制作指南 准备工作 开始创建R包 在Rstudio内完成R包构建    先前与大家分享过如何安装和使用R包,也与大家分享过自定义函数,这些都是R包的基础.一般来说,会将写好的函数进行封装,打包起来 ...

  3. r语言工作路径linux,R语言实用基础知识_工作路径-注释-安装和卸载R包_2019-12-01...

    R语言的实用基础知识有很多,都是我在工作和学习中所整理的,有的是看书整理的,也有的是从网络上的各种博客.各种资源获取的,所以我采用日更的方式进行支持整理和更新,希望能够帮到屏幕前的你! 今天是我日更的 ...

  4. R语言 image.binarization: 包_想提高文章的引用率?写个R包吧!- 工具准备篇

    前言 R语言程序包是R语言的灵魂,是R语言的核心,每一个R语言用户都会使用到R包.2006年3月15日,第一个R包(coxrobust)加入CRAN,截止2020年5月17日,已经有超过15000个R ...

  5. BiocManager安装R包解决下载速度太慢的问题

    在安装完R语言和RStudio后,我配置了R包安装的镜像.配置镜像的方式有两种. 一是直接修改R安装路径:.\R-4.1.2\etc下的Rprofile.site文件(如下图所示),添加如下内容: # ...

  6. r语言查找是否存在空值_关于R包安装你知道多少?

    在R语言的学习过程中离不了各种R包的安装与使用,要使用某个R包首先得学会如何安装该R包.对于R包的安装你知道的有多少?你知道如何指定安装路径吗?为何你每次重新打开R绘画都需要重新安装R包?今天小编带你 ...

  7. [R语言]R包的安装帮助获取

    本文主要参考:Paul Teetor<R语言经典实例>一书 在R语言中,包含的包中有各种应用函数: 1.install.packages('packagename')//安装R包 libr ...

  8. R包安装报错的解决方法

    目录 无法下载 换源 依赖包的问题 依赖包未安装 依赖包版本不对 依赖包与当前R版本不匹配 无法下载 换源 install.packages("tidyverse",repo=&q ...

  9. 包r语言_R语言代码共享:制作R包

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

最新文章

  1. 【更新】比较智能的爬取姓名
  2. Java中获取数据库中两个时间的相差秒数
  3. SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志(转)...
  4. 跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用
  5. 小朋友的经典造句,现在做老师的太不容易了
  6. python提现_用Python创建比特币钱包,读余额,极速免费转账,标准转账
  7. PDF文档转换成mobi格式(for kindle),并解决排版问题
  8. 百度SEO站群爱客影院v3.5自动采集影视网站源码
  9. Ember.js 初学指南
  10. C++打印机首选项设置
  11. PCB多层板设计技巧
  12. 制作一份简单的网络地图(世博地图的配准和切割)
  13. ASP.Net三层架构
  14. Linux和Windows的区别
  15. 行业洞察系列之《事件管理的 5 个阶段及其改进建议》
  16. sh_10_嵌套打印小星星
  17. 基于多视角照片的3D人脸重建
  18. 苹果cms怎么更换模板教程
  19. 优秀logo设计解析_优秀logo设计作品及寓意解析,国外精品logo设计图片分享
  20. php phalcon 安装,Phalcon框架安装与使用教程介绍

热门文章

  1. html怎么使用element ui,element-ui是什么,以及element-ui如何使用
  2. 优化Elasticsearch查询性能
  3. iphone12发布会直播地址苹果12发布会在线观看入口
  4. 内连级元素有哪些_内联元素和块级元素
  5. 网站升级维护nginx配置
  6. Tencent Linux(TencentOS) 十年云原生迭代演进之路
  7. 可以加载Gif动画和png等图片的方法和控件
  8. 国庆清北刷题冲刺班 Day6 上午
  9. html单选框servlet,js、servlet分别获取下拉框、单选框、复选框的值
  10. 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)