使用 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.6RStudio版本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 文件并单独留下 DESCRIPTIONNAMESPACE

这两个脚本都是 littler 的一部分,我确保它们在我的 $PATH 上。