Rcpp和RcppArmadillo创建R语言包的实现方式

目录
  • 1. 预先准备
    • 源文件示例func.cpp
    • 头文件示例test_h.h
  • 2. 创建R包步骤
    • 新建R Package
    • R包的文件结构
    • 修改DESCRIPTION文件
  • 3. C++11标准问题

1. 预先准备

Windows下需要安装Rtools,R中装好Rcpp和RcppArmadillo。创建C++源文件func.cpp,自定义头文件test_h.h

源文件示例func.cpp

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins(cpp11)]]
#include <RcppArmadillo.h>
#include <vector>
#include "./test_h.h"

using namespace Rcpp;
using namespace std;
// using namespace arma;

// [[Rcpp::export]]
RObject func(){
  arma::cube A(3,4,5,arma::fill::randu);
  std::cout<<CONDIT<<std::endl;
  return wrap(A);
}

// [[Rcpp::depends(RcppArmadillo)]]:用于指明需要使用RcppArmadillo。

// [[Rcpp::plugins(cpp11)]]:指明需要使用C++11。

#include "./test_h.h":表示使用第三方头文件。第三方头文件需要用双引号""包括起来,并加上.h./表示在当下文件夹(src)下搜寻文件。

// using namespace arma;不一定有用。如果要用Armadillo的数据结构,在其之前需指明arma::

func()函数将可以直接在R中调用。

头文件示例test_h.h

#include <iostream>
#define CONDIT 1000

2. 创建R包步骤

新建R Package

选择Package w/Rcpp, 并添加源文件。或者建立包以后,手动复制到src文件夹下。

R包的文件结构

修改DESCRIPTION文件

将RcppArmadillo添加进Imports和LinkingTo中。

Package: RcppPackTest
Type: Package
Title: What the Package Does (Title Case)
Version: 0.1.0
Author: Who wrote it
Maintainer: The package maintainer <yourself@somewhere.net>
Description: More about what it does (maybe more than one line)
    Use four spaces when indenting paragraphs within the Description.
License: What license is it under?
Encoding: UTF-8
LazyData: true
Imports: Rcpp (>= 0.12.11), RcppArmadillo
LinkingTo: Rcpp, RcppArmadillo

Build & Reload 建立包

3. C++11标准问题

如果要使用C++11标准,第一种方法是在Makevars文件中添加如下代码:

CXX = g++-4.8.1
PKG_CXXFLAGS = -std=c++11

第二种方法是在.cpp文件前添加// [[Rcpp::plugins(cpp11)]]

以上就是Rcpp和RcppArmadillo创建R包实现方式的详细内容,更多关于Rcpp和RcppArmadillo创建R包的资料请关注我们其它相关文章!

(0)

相关推荐

  • R语言学习RcppEigen进行矩阵运算

    目录 创建cpp文件 代码示例 其他矩阵操作 命名 基础用法 定义矩阵 对矩阵的一些基础操作1 基础操作2 矩阵基础运算1 矩阵基础运算2 求最小最大值.迹等 点乘等 特征值与特征向量 形式转换 矩阵初始化0 Map等操作 求解Ax = b 前面我们介绍了一些基本的Rcpp的用法:让你的R代码更快--Rcpp入门,但用基础的Rcpp来进行矩阵运算还是非常麻烦,没有现成的函数来让我们使用. 这时我们就想到:是否可以调用别的库来解决矩阵运算的一些问题呢?这就需要我们的RcppEigen包,也就是C+

  • 解决R语言安装时出现辑程包不存在的问题

    [解决方案] 1.使用命令单独安装caret,安装的时间很长. install.packages("caret", dependencies = c("Depends", "Suggests")) 需要安装依赖的包全部安装之后,就可以了. 依赖包如下: dependencies 'doMC', 'rpvm', 'Rcompression', 'RMySQL', 'globaltest', 'OpenMx', 'pryr', 'gpclib', '

  • R语言学习Rcpp基础知识全面整理

    目录 1. 相关配置和说明 2. 常用数据类型 3. 常用数据类型的建立 4. 常用数据类型元素访问 5. 成员函数 6. 语法糖 6.1 算术和逻辑运算符 6.2. 常用函数 7. STL 7.1. 迭代器 7.2. 算法 7.3. 数据结构 7.3.1. Vectors 7.3.2. Sets 7.3.3. Maps 8. 与R环境的互动 9. 用Rcpp创建R包 10. 输入和输出示例 如何传递数组 通过.attr("dim")设置维数 函数返回一维STL vector 函数返回

  • Rcpp入门R代码提速方法过程

    目录 在RStudio中创建C++文件 详细说明 更多内容 总结 当我们使用R进行论文模拟时,通常会涉及到许多的循环.一般比较容易的提速方法是将我们的for循环改写为apply族的方法进行向量化运算,但这个方法速度提升的有限,在真实模拟时,如果要与其他算法进行速度的比较,除非自己的算法非常出色,否则还是很难与一些成熟包中的算法相庭抗礼. 这时想要再次进行提速,有多种方法,常见的几种是将代码改写为Fortran代码,改写为C++代码抑或改写为C代码.由于Rcpp包的存在,改写为C++代码相对简单,

  • Rcpp和RcppArmadillo创建R语言包的实现方式

    目录 1. 预先准备 源文件示例func.cpp 头文件示例test_h.h 2. 创建R包步骤 新建R Package R包的文件结构 修改DESCRIPTION文件 3. C++11标准问题 1. 预先准备 Windows下需要安装Rtools,R中装好Rcpp和RcppArmadillo.创建C++源文件func.cpp,自定义头文件test_h.h. 源文件示例func.cpp // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::plugins(

  • R语言包ggplot实现分面去掉小标题的灰色底色小技巧

    目录 当我们在使用 ggplot 时,使用分面通常会长下面这样(这里用 ggplot 的官方案例): p <- ggplot(mpg, aes(displ, hwy)) + geom_point() p + facet_wrap(~class) 此时,我们想将背景的灰色底色去掉,可以用我们常用的 theme_bw(): p + facet_wrap(~class) + theme_bw() 此时如果背景的灰色网格不想要了,可以接着添加 theme(panel.grid = element_bla

  • 关于R语言包的升级与降级问题

    R语言包的升级与降级 这篇博客只是记录一下在使用偏最小二乘判别分析时遇到的一些问题: 暑期实习期间曾自行使用R语言caret包进行机器学习某些方法的训练,在训练过程中需要对某些包进行升级或者降级.klaR在训练过程的bug: Error in predict.NaiveBayes(object$probModel[[ncomp[i]]], as.data.frame(tmpPred[, : Not all variable names used in object found in newdat

  • R语言 实现多行注释的方式

    R语言本身并没有类似C/ C++/ JAVA这些语言一样提供 像 /* ..... */ 一样的多行注释,但我们也有其他方法可以达到这种方法. 一. if语句 我们可以通过一个if语句,里面添加一个永为假的条件,这样也可以达到多行注释的目的. if(FALSE) { ...... } 二. 使用快捷键 使用快捷键这种方法,仅在RStudio中可以使用.首先选中要注释掉的行,然后按 Ctrl+shift+C ,这样就注释掉了.这其实和单行注释的方法一样,只不过RStudio帮我们简化而已. 如果要

  • R语言关于“包”的知识点总结

    R语言的包是R函数,编译代码和样本数据的集合. 它们存储在R语言环境中名为"library"的目录下. 默认情况下,R语言在安装期间安装一组软件包. 随后添加更多包,当它们用于某些特定目的时. 当我们启动R语言控制台时,默认情况下只有默认包可用. 已经安装的其他软件包必须显式加载以供将要使用它们的R语言程序使用. 所有可用的R语言包都列在R语言的包. 下面是用于检查,验证和使用R包的命令列表. 检查可用R语言的包 获取包含R包的库位置 .libPaths() 当我们执行上面的代码,它产

  • R语言关于决策树知识点总结

    决策树是以树的形式表示选择及其结果的图.图中的节点表示事件或选择,并且图的边缘表示决策规则或条件.它主要用于使用R的机器学习和数据挖掘应用程序. 决策树的使用的例子是 预测电子邮件是垃圾邮件或非垃圾邮件,预测肿瘤癌变,或者基于这些因素预测贷款的信用风险.通常,使用观测数据(也称为训练数据)来创建模型.然后使用一组验证数据来验证和改进模型. R具有用于创建和可视化决策树的包.对于新的预测变量集合,我们使用此模型来确定R包"party"用于创建决策树. 安装R语言包 在R语言控制台中使用以

  • R语言关于随机森林算法的知识点详解

    在随机森林方法中,创建大量的决策树. 每个观察被馈入每个决策树. 每个观察的最常见的结果被用作最终输出. 新的观察结果被馈入所有的树并且对每个分类模型取多数投票. 对构建树时未使用的情况进行错误估计. 这称为OOB(袋外)误差估计,其被提及为百分比. R语言包"randomForest"用于创建随机森林. 安装R包 在R语言控制台中使用以下命令安装软件包. 您还必须安装相关软件包(如果有). install.packages("randomForest") 包&qu

  • R语言常见面试题整理

    尊敬的读者,这些R语言面试题是专门设计的,以便您应对在R语言相关面试中可能会被问到的问题. 根据我的经验,良好的面试官几乎不打算在你的面试中问任何特定的问题,通常都是以如下的问题为开端进一步展开后继的问题. 什么是R语言编程? R语言是一种用于统计分析和为此目的创建图形的编程语言.不是数据类型,它具有用于计算的数据对象.它用于数据挖掘,回归分析,概率估计等领域,使用其中可用的许多软件包. R语言中的不同数据对象是什么? 它们是R语言中的6个数据对象.它们是向量,列表,数组,矩阵,数据框和表. 什

  • R语言关于生存分析知识点总结

    生存分析处理预测特定事件将要发生的时间. 它也被称为故障时间分析或分析死亡时间. 例如,预测患有癌症的人将存活的天数或预测机械系统将失败的时间. 命名为survival的R语言包用于进行生存分析. 此包包含函数Surv(),它将输入数据作为R语言公式,并在选择的变量中创建一个生存对象用于分析. 然后我们使用函数survfit()创建一个分析图. 安装软件包 install.packages("survival") 语法 在R语言中创建生存分析的基本语法是 Surv(time,event

随机推荐