将 Rcpp 文件添加到现有的 r 包中?

add and Rcpp file to an existing r Package?

我已经制作了一个简单的 R 包(纯 R)来解决暴力问题,然后我尝试通过编写 Rcpp 脚本来加快代码速度。我写了一个脚本来比较 运行 时间和“bench”库。现在,如何将此脚本添加到我的包中?我试着添加

#'@importFrom Rcpp cppFunction 

在我的 R 脚本之上,将 Rcpp 文件插入 scr 文件夹,但没有用。有没有一种方法可以将它添加到我的 r 包中而无需从头开始创建包?抱歉,如果已经有人问过,但我是新手,完全迷失了。

这种转换实际上(仍然)出奇地困难(在需要多个文件的意义上)。很容易忽略细节。让我来告诉你为什么。

让我们暂时假设您使用 R 包 package.skeleton() 启动了一个工作包。这是最简单和最普遍的情况。该包将工作(但有警告,请参阅我的 pkgKitten 包装器而不是清理包,以及 CRAN 上的其他十几个帮助功能和包的包)。请特别注意,我对 roxygen2 只字未提,这只是一个额外的复杂问题,所以让我们只关注 .Rd 个文件。

您现在可以将最简单的包与由 Rcpp 构建并为 Rcpp 构建的包进行对比,即使用 Rcpp.package.skeleton()。您将在

中看到至少这些差异
  • DESCRIPTION 对于 LinkingTo:Imports
  • NAMESPACE importFrom 以及 useDynLib
  • 一个新的 src 目录和可能需要 src/Makevars

所有这些都使得(基本上)通过 Rcpp.package.skeleton() 启动新包并将现有包代码复制到该包中变得更加容易。我们根本没有转换助手。我仍然不时地进行您尝试的“手动转换”,甚至我需要尝试一两次并且我已经多次看到所有错误消息...

所以即使您不想“复制所有内容”,我认为最简单的方法是

  • 创建 两个 包,有和没有 Rcpp
  • 做一个递归 diff
  • 确保差异适用于您的原始包裹。

PS 请记住,当您使用 roxygen2 并且在 src/ 目录中有文档时,总是先 运行 Rcpp::compileAttributes() 在 [=64= 之前]宁roxygen2::roxygenize()。 RStudio 和其他助手会为您做这些,但仍然很容易忘记...