使用 Rcpp 在包中生成 .Rd 文件
.Rd file generation in a package using Rcpp
我使用 Rcpp.package.skeleton()
命令创建了一个包含 Rcpp
代码的测试包。根据小插图生成了所有必需的文件,我能够编译包。
我尝试在示例代码中添加 roxygen2
样式注释
#include <Rcpp.h>
using namespace Rcpp;
//' @param none required
//' @return List of functions
// [[Rcpp::export]]
List rcpp_hello_world() {
CharacterVector x = CharacterVector::create( "foo", "bar" ) ;
NumericVector y = NumericVector::create( 0.0, 1.0 ) ;
List z = List::create( x, y ) ;
return z ;
}
我看到新的R/RcppExports.R
显示了修改
#' @param none required
#' @return List of functions
rcpp_hello_world <- function() {
.Call('TestPackageRcpp_rcpp_hello_world', PACKAGE = 'TestPackageRcpp')
}
但这些更改不会转移到 rcpp_hello_world.Rd
文件,?rcpp_hello_world()
仍然提供
rcpp_hello_world {TestPackageRcpp} R Documentation
Simple function using Rcpp
Description
Simple function using Rcpp
Usage
rcpp_hello_world()
Examples
## Not run:
rcpp_hello_world()
## End(Not run)
同样,我创建了另一个文件 timesTwo.cpp
文件并添加了
//' @param - a numeric vector
//' @return - a numeric vector
到 timesTwo.cpp
文件。我在 R/RcppExports.R
文件
中看到了修改
#' @param numeric vector
#' @return numeric vector
timesTwo <- function(x) {
.Call('TestPackageRcpp_timesTwo', PACKAGE = 'TestPackageRcpp', x)
}
但没有创建新的 /man/timesTwo.Rd
文件。
我也在创建新文件后 运行 Rcpp::compileAttributes()
运行 构建并重新加载包。
我是否以错误的方式创建了新文件?这不是什么大问题,我可以手动编写 timesTwo.Rd
,但如果该功能已经可用,我希望能够在 timesTwo.cpp
中编写注释。我正在使用
platform x86_64-apple-darwin13.1.0
arch x86_64
os darwin13.1.0
system x86_64, darwin13.1.0
status
major 3
minor 1.0
year 2014
month 04
day 10
svn rev 65387
language R
version.string R version 3.1.0 (2014-04-10)
nickname Spring Dance
和Rcpp
版本0.11.6
和RStudio
版本0.99.441
据我所知如果您使用 RStudio,所有这些都为您完成——因为 RStudio 非常支持 roxygen2,当然也支持 Rcpp。您可能必须确保单击 RStudio 工具配置中的框才能使用 roxygen。
我仍然手工完成,或者更确切地说,shell 脚本。可悲的是,我们(至少目前)在 R CMD build
步骤中没有 "hooks" 来自动执行此操作。
因此,当我更新 .cpp
源文件时,我通常会调用脚本 compAttr.r
从 Rcpp 调用 compileAttributes()
函数。我会将 roxygen 标记从 .cpp 提取到 .R 文件。
然后我调用脚本 roxy.r
从 .R 文件生成(或更新).Rd 文件。根据我的选择,这只会更新 .Rd 文件并单独留下 DESCRIPTION
和 NAMESPACE
。
这两个脚本都是 littler 的一部分,我确保它们在我的 $PATH
上。
我使用 Rcpp.package.skeleton()
命令创建了一个包含 Rcpp
代码的测试包。根据小插图生成了所有必需的文件,我能够编译包。
我尝试在示例代码中添加 roxygen2
样式注释
#include <Rcpp.h>
using namespace Rcpp;
//' @param none required
//' @return List of functions
// [[Rcpp::export]]
List rcpp_hello_world() {
CharacterVector x = CharacterVector::create( "foo", "bar" ) ;
NumericVector y = NumericVector::create( 0.0, 1.0 ) ;
List z = List::create( x, y ) ;
return z ;
}
我看到新的R/RcppExports.R
显示了修改
#' @param none required
#' @return List of functions
rcpp_hello_world <- function() {
.Call('TestPackageRcpp_rcpp_hello_world', PACKAGE = 'TestPackageRcpp')
}
但这些更改不会转移到 rcpp_hello_world.Rd
文件,?rcpp_hello_world()
仍然提供
rcpp_hello_world {TestPackageRcpp} R Documentation
Simple function using Rcpp
Description
Simple function using Rcpp
Usage
rcpp_hello_world()
Examples
## Not run:
rcpp_hello_world()
## End(Not run)
同样,我创建了另一个文件 timesTwo.cpp
文件并添加了
//' @param - a numeric vector
//' @return - a numeric vector
到 timesTwo.cpp
文件。我在 R/RcppExports.R
文件
#' @param numeric vector
#' @return numeric vector
timesTwo <- function(x) {
.Call('TestPackageRcpp_timesTwo', PACKAGE = 'TestPackageRcpp', x)
}
但没有创建新的 /man/timesTwo.Rd
文件。
我也在创建新文件后 运行 Rcpp::compileAttributes()
运行 构建并重新加载包。
我是否以错误的方式创建了新文件?这不是什么大问题,我可以手动编写 timesTwo.Rd
,但如果该功能已经可用,我希望能够在 timesTwo.cpp
中编写注释。我正在使用
platform x86_64-apple-darwin13.1.0
arch x86_64
os darwin13.1.0
system x86_64, darwin13.1.0
status
major 3
minor 1.0
year 2014
month 04
day 10
svn rev 65387
language R
version.string R version 3.1.0 (2014-04-10)
nickname Spring Dance
和Rcpp
版本0.11.6
和RStudio
版本0.99.441
据我所知如果您使用 RStudio,所有这些都为您完成——因为 RStudio 非常支持 roxygen2,当然也支持 Rcpp。您可能必须确保单击 RStudio 工具配置中的框才能使用 roxygen。
我仍然手工完成,或者更确切地说,shell 脚本。可悲的是,我们(至少目前)在 R CMD build
步骤中没有 "hooks" 来自动执行此操作。
因此,当我更新 .cpp
源文件时,我通常会调用脚本 compAttr.r
从 Rcpp 调用 compileAttributes()
函数。我会将 roxygen 标记从 .cpp 提取到 .R 文件。
然后我调用脚本 roxy.r
从 .R 文件生成(或更新).Rd 文件。根据我的选择,这只会更新 .Rd 文件并单独留下 DESCRIPTION
和 NAMESPACE
。
这两个脚本都是 littler 的一部分,我确保它们在我的 $PATH
上。