Rcpp:无缝集成 R 与 C++,高效实现跨语言开发

Seamless R and C++ Integration

分支12Tags49
文件最后提交记录最后更新时间
2 个月前
2 个月前
4 个月前
1 个月前
7 年前
1 个月前
1 个月前
8 个月前
2 个月前
2 年前
11 年前
7 个月前
8 年前
6 年前
2 年前
1 个月前
7 个月前
1 个月前
9 年前
9 个月前
1 个月前
9 年前
11 年前
8 个月前
15 年前

Rcpp:R与C++的无缝集成

CI License CRAN Dependencies Coverage Status Debian package r-universe Last Commit Downloads (monthly) Downloads (total) CRAN use CRAN indirect BioConductor use Doxygen Documentation JSS Springer useR! TAS

概述

Rcpp 包 通过 R 函数和一个(仅头文件的)C++ 库实现了 R 与 C++ 的集成。

所有底层 R 类型和对象,即 R 内部由 SEXP 表示的一切,都与相应的 C++ 对象相匹配。这包括从向量、矩阵或列表到环境、函数等各种内容。每种 SEXP 变体都自动映射到一个专用的 C++ 类。例如,数值向量表示为 Rcpp::NumericVector 类的实例,环境表示为 Rcpp::Environment 的实例,函数表示为 Rcpp::Function 等。Rcpp-introduction 小手册(现已发表为 TAS 论文;早期的介绍 Rcpp-jss-2011.pdf 也发表为 JSS 论文)为 Rcpp 提供了良好的入门点,Rcpp 网站Rcpp 页面Rcpp 示例库 也是如此。完整文档由 Rcpp 书籍 提供。

其他亮点:

  • C++ 与 R 之间的转换由模板 Rcpp::wrapRcpp::as 驱动,它们具有高度的灵活性和可扩展性,如 Rcpp-extending 小手册中所述。

  • Rcpp 还提供了 Rcpp 模块,这是一个允许将 C++ 函数和类暴露到 R 层面的框架。Rcpp-modules 小手册详细介绍了 Rcpp 模块当前的功能集。

  • Rcpp 包含一个称为 Rcpp sugar 的概念,它将许多 R 函数引入 C++。Sugar 利用惰性计算和表达式模板来实现出色的性能,同时提供比等效的底层循环代码更易用的语法。Rcpp-sugar 小手册对该功能进行了概述。

  • Rcpp 属性提供了一种高级语法,用于声明可从 R 调用的 C++ 函数,并自动生成调用它们所需的代码。属性旨在促进在 R 会话中交互式使用 C++ 以及支持 R 包开发。属性构建在 Rcpp 模块之上,其实现基于 inline 包中的先前工作。有关更多详细信息,请参见 Rcpp-attributes 小手册。

文档说明

该软件包附带十个 PDF vignettes,其中包括最新的 Rcpp 介绍,现已作为一篇论文发表于 TAS(并作为 PeerJ 预印本发布)。此外,还有一篇早期介绍,该介绍已作为JSS 论文发表。

其他 vignettes 包括 Rcpp 常见问题解答Rcpp 属性介绍。更多文档可参考 Eddelbuettel 所著的 Rcpp 书籍(2013 年,Springer 出版);有关详细信息,请参见 'citation("Rcpp")'。

C++ 类结构文档(由 doxygen 生成)也已提供。

性能

Rcpp 遵循 C++ 的“按需付费”理念,不会带来任何运行时性能损失:在直接对比中,Rcpp 的性能优于相关软件包,例如,详情可参见 此代码库

编译时性能可通过选择组件进行调整。但值得注意的是,使用 ccache 将(显著)优于所有此类组件选择,我们之前曾推荐过使用它。

示例

Rcpp 示例库展示了超过一百个完整记录且可运行的示例。RcppExamples 软件包包含一些涵盖核心数据类型的基本示例。

软件包中包含多个示例,以及超过一千个单元测试,这些测试提供了额外的使用示例。

Rcpp 的早期版本(包含我们现在称为“经典 Rcpp API”的内容)由 Dominick Samperi 于 2005 年和 2006 年编写。此代码已从 Rcpp 中分离出来,形成 RcppClassic 软件包,对于依赖旧接口的代码,该软件包仍然可用。新开发应始终使用此 Rcpp 软件包。

其他使用示例由使用 Rcpp 的软件包提供。截至 2025 年 7 月初,有 3043 个 CRAN 软件包使用 Rcpp(占所有软件包的 13.6%,占包含编译代码的软件包的 61.3%),在当前版本的 BioConductor 中还有 271 个软件包,以及数量未知的 GitHub、Bitbucket、R-Forge 等代码库使用 Rcpp。所有这些软件包都为 Rcpp 提供了使用示例。该软件包已被广泛使用,下载次数超过 1.006 亿次(根据 CRAN 云镜像的部分日志)。

安装

CRAN

CRAN 上发布的 Rcpp 经过了仔细的测试和筛选。CRAN 确保它们能在所有测试环境中与其他所有 CRAN 包进行互操作。这些已发布并经过测试的版本可通过 CRAN 网络的所有镜像获取,并且可以在 R 中通过以下方式安装

install.packages("Rcpp")

发布候选版本

我们通常会通过 r-universe 页面 提供临时的 候选 版本。该页面提供了一个标准的 R 仓库,对应于源代码仓库中当前的 main 分支。二进制版本和源代码版本都可以通过以下方式安装:

install.packages("Rcpp", repos = c("https://rcppcore.r-universe.dev",
                                   "https://cloud.r-project.org"))

可根据需要设置其他仓库。

在正式发布前测试候选版本会有所帮助。如果可以,请运行此测试。

源代码

要从源代码安装,请确保您拥有 R 的完整软件包开发环境,相关文档中已对此进行讨论;另请参见 Rcpp-FAQ 中的问题 1.2 和 1.3。

不太常见的版本和平台

如果您希望在其他(未在 CRAN 上测试的)平台上运行 Rcpp,或者在早于上一版本的版本上运行,建议您进行应有的尽职调查并相应地进行测试。Rcpp 由全志愿团队提供支持,资源有限。我们努力测试 Rcpp 与数千个使用它的 CRAN 软件包的兼容性,但我们无法在过时的 R 版本或您的操作系统上进行测试。

支持

提问的最佳场所可能是 GitHub 仓库的 讨论区 或 R-forge 上的 rcpp-devel 邮件列表,该列表主要关注 使用 Rcpp 进行开发(而非 Rcpp 本身的开发,对此我们有另一个列表)。

GitHub 仓库的 问题工单 是主要的错误报告界面。与其他网络资源一样,也可以搜索以前的问题。

作者

Dirk Eddelbuettel、Romain Francois、JJ Allaire、Kevin Ushey、Qiang Kou、Nathan Russell、Iñaki Ucar、Doug Bates 和 John Chambers

许可证

GPL (>= 2)

项目介绍

R与C++的无缝集成【此简介由AI生成】

定制我的领域