gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:04:28 25 4
gpt4 key购买 nike

我已经制作了一个简单的 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()在运行 roxygen2::roxygenize() 之前。 RStudio 和其他 helper 会为您做这些,但仍然很容易忘记...

关于r - 将 Rcpp 文件添加到现有的 r 包中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64305660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com