Rcpp: 连接了R与C++

本文是我看《Rcpp:R与C的无缝整合》一书的一些收获,有不准确的地方,请指出也请见谅!

一、为什么使用C++代码?

在运行速度方面,C++代码的运行运行速度比R快的多。所以想在R中调用C++函数,如何调用?桥梁就是Rcpp,Rcpp是一个R包。

二、如何在R中调用/使用C++函数,以达到提高运行速度的目标呢?

一种编译、链接和载入的方法是使用inline包中的cxxfunction函数:

首先,我们需要有两个文件,一个是后缀为.cpp的C++代码文件,一个是后缀为.R的R脚本文件。在R可以调用C++函数之前,需要对.cpp文件进行编译、链接和装载到R会话中,如何实现编译、链接和装载呢?有几种方法,其中最简便的是使用inline包,inline包中的R函数cfunction(.)和cxxfunction(.)在R会话中直接编译、链接和装载C++函数。其中cxxfunction函数中的参数plugin提供了额外的头文件和库位置,一般使用plugin="Rcpp"。好消息是,在0.3.10及以后版本的inline中,提供了一个非常方便的封装器rcpp,可以自动添加plugin="Rcpp",所以在cxxfunction(.)函数中plugin参数可以省略。cxxfunction(.)函数中需要添加的参数有(1)signature参数:提供变量及其类型。(2)body:提供c++代码。将cxxfunction(.)函数赋值给一个R对象,这个R对象就是R中的函数,通过在R中引用这个函数,从而达到调用C++函数的目的。

也可以只有一个后缀为.R的R脚本文件,其中C++代码可以放在这个R脚本文件中,用一对单引号'c++代码'出现在cxxfunction(.)前,传递给inline包里的cxxfunction()函数中的参数body。(见书P29,代码2.4)

另一种编译、链接和载入的方法是使用Rcpp的attributes:

Rcpp最近提供了一个C++和R之间更直接的联系:attributes. Rcpp attributes内化了inline中的核心特性,并且重用了诸如plugin等供inline使用的基础结构。Rcpp attributes提供了许多新函数,其中sourceCpp用于载入一个C++函数,例如,见P35,代码2.9.除此之外,我们可以把后缀为.cpp的文件,其文件名传给sourceCpp函数,由其来编译、链接和载入相应的C++代码,并赋值给R函数。

以上这两种方法都是编译、链接和载入相应的C++代码,然后赋值给R中,没有使用.Call(.)函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值