2015-05-20 2 views
0

Я создал тестовый пакет, содержащий код Rcpp, используя команду Rcpp.package.skeleton(). Все необходимые файлы в соответствии с виньеткой были сгенерированы, и я смог скомпилировать пакет.. Создание файла RD в пакете с использованием 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

+0

Вам нужно будет вызвать 'devtools :: document()' для обеспечения создания файлов '.Rd' из генерируемых комментариев roxygen. –

+0

Спасибо! См. Мой комментарий ниже для получения полного ответа. – SN248

ответ

1

Насколько я знаю если вы используете RStudio все это делается для вас - потому что RStudio очень поддерживает tboth roxygen2 и курс Rcpp. Возможно, вам нужно будет щелкнуть поле в настройке RStudio Tools для использования roxygen.

Я все еще делаю это вручную, вернее, сценарий оболочки. Печальная часть состоит в том, что у нас (в настоящее время по крайней мере) нет «крючков» на этапе R CMD build, чтобы автоматизировать это.

Поэтому, когда я обновляю исходный файл .cpp, я обычно вызываю скрипт compAttr.r для вызова функции compileAttributes() из Rcpp. Я возьму разметку roxygen из .cpp в .R-файл.

Затем я вызываю скрипт roxy.r, чтобы сгенерировать (или обновить) .Rd-файл из файла .R. по моему выбору, это только обновляет файл .Rd и оставляет только DESCRIPTION и NAMESPACE.

Оба этих сценария являются частью littler, и я уверен, что они находятся на моем $PATH.

+0

Спасибо @DirkEddelbuettel и Кевин Уши. Речь идет о проверке ящиков в Project Tools - «Создавать документацию с помощью Roxygen» и «Автоматически reoxygenize при запуске Build & Reload». Однако я заметил, что просто добавление '@ param' и' @ return' дает мне ошибку 'Error: ~/TestPackageRcpp/man/timesTwo.Rd: разделы \ title и \ name должны существовать и быть уникальными в файлах Rd'. Поэтому мне также пришлось добавить '@ name' и' @ title' в новый файл 'timesTwo.cpp'. – SN248

Смежные вопросы