将 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 和其他助手会为您做这些,但仍然很容易忘记...
我已经制作了一个简单的 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 和其他助手会为您做这些,但仍然很容易忘记...