Attualmente ho un file .cpp
che posso compilare utilizzando sourceCpp()
. Come previsto, la funzione R corrispondente viene creata e il codice funziona come previsto.Spostamento da sourceCpp a un pacchetto w/Rcpp
Eccolo:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector exampleOne(NumericVector vectorOne, NumericVector vectorTwo){
NumericVector outputVector = vectorOne + vectorTwo;
return outputVector;
}
ora sto convertendo il mio progetto verso un pacchetto utilizzando Rcpp
. Così ho creato lo scheletro con rStudio e ho iniziato a studiare come convertire le cose.
In Hadley di excellent primer on Cpp, dice nella sezione "Utilizzo di Rcpp in un pacchetto":
If your packages uses the Rcpp::export attribute then one additional step in the package build process is requried. The compileAttributes function scans the source files within a package for Rcpp::export attributes and generates the code required to export the functions to R.
You should re-run compileAttributes whenever functions are added, removed, or have their signatures changed. Note that if you build your package using RStudio or devtools then this step occurs automatically.
Quindi sembra che il codice compilato con sourceCpp()
dovrebbe funzionare più o meno come è in un pacchetto.
Ho creato il file R corrispondente.
exampleOne <- function(vectorOne, vectorTwo){
outToR <- .Call("exampleOne", vectorOne, vectorTwo, PACKAGE ="testPackage")
outToR
}
Poi ho (ri) costruito il pacchetto e ottengo questo errore:
Error in .Call("exampleOne", vectorOne, vectorTwo, PACKAGE = "voteR") : C symbol name "exampleOne" not in DLL for package "testPackage"
Qualcuno ha un'idea di che cosa ho bisogno di fare quando prende il codice che compila con sourceCpp() e quindi utilizzarlo in un pacchetto?
Vorrei sottolineare che ho letto: "Scrivere un pacchetto che utilizza Rcpp" http://cran.rstudio.com/web/packages/Rcpp/vignettes/Rcpp-package.pdf e capire la struttura di base presentato lì. Tuttavia, dopo aver esaminato il codice sorgente RcppExamples
, sembra che la struttura delle vignette non sia esattamente la stessa utilizzata nel pacchetto di esempio. Ad esempio non ci sono file .h usati. Inoltre né la vignetta né il codice sorgente usano l'attributo [[Rcpp :: export]]. Tutto ciò rende difficile rintracciare esattamente dove si trova il mio errore.
Se si utilizza 'compileAttributes' correttamente, non è necessario creare le funzioni R da soli.Ma molto dipende da come si sta creando il pacchetto: gli strumenti di sviluppo del pacchetto in RStudio e in (la versione di sviluppo di) devtools si prenderanno cura della maggior parte dei dettagli per voi. – hadley
Il mio voto è ancora valido per farlo a mano e capire cosa succede --- inizia con 'rcpp.package.skeleton()' che * fa * ha un'opzione per l'uso con Attributi. –
Grazie a tutti e due. Ho scaricato la "mia" versione del file R dopo aver realizzato, proprio come Hadley ha detto, che il file RcppExports.R conteneva tutte le funzioni R corrispondenti (grazie alla ["Attributi" Vignetta] (http: //dirk.eddelbuettel. it/code/rcpp/Rcpp-attributes.pdf.)) L'errore è scomparso ora. Cercando di creare la mia versione del file R è stato in qualche modo avvincente (forse la libreria condivisa?). – politicalEconomist