2016-05-05 6 views
0

Ich vermute, das ist eine einfache Frage, aber ich bin neu in Cpp, und bin fest.Zwei rcpp Funktionen in der gleichen CPP-Datei

Ich habe eine Funktion in R erstellt, mit RCPP und:

// [[Rcpp::export]] 

ich die Funktion in R nennen kann und es funktioniert wie vorgesehen. Nennen wir es F1().

Als nächstes möchte ich eine andere Funktion, F2(), in der gleichen Datei Cpp erstellen, die die erste Funktion aufruft. Ich benutze Standard-Funktionsanrufsprache (d. H. F1(arguments)), und kompiliert fein durch R, wenn ich sourceCpp() verwende. Aber wenn ich versuche F2() in R zu nennen, die ich erhalten:

Fehler bei eval (ausdr, envir, enclos): konnte nicht Funktion "F2"

Ratschläge finden?

Danke.

#include <Rcpp.h> 
using namespace Rcpp; 


// [[Rcpp::export]] 
NumericVector F1(NumericVector x) { 
    return x * 2; 
} 
NumericVector F2(NumericVector x) { 
    return x *F1(x); 
} 
// even if i put return x*x*x instead of x*F1(X), I got the same error 

/*** R 
F1(42) 
F2(51) 
*/ 
+2

Sie benötigen für jede exportierte Funktion eine Exportdeklaration. Wenn Sie sourceCpp mit verbose = TRUE aufrufen, können Sie genau sehen, welcher Code generiert wurde. – nrussell

+1

Das ist eine doppelte Frage auch ... –

Antwort

1

Für jede Funktion, die Sie ein Exporteur Kommentar zu bieten haben // [[RCPP :: Export]]. Diese Zeile ist wichtig, um die Funktion in R zu senden. Ihr Code muss folgendermaßen geschrieben werden:

#include <Rcpp.h> 
using namespace Rcpp; 


// [[Rcpp::export]] 
NumericVector F1(NumericVector x) { 
    return x * 2; 
} 
// [[Rcpp::export]] 
NumericVector F2(NumericVector x) { 
    return x *F1(x); 
} 


/*** R 
F1(42) 
F2(51) 
*/ 
+0

Vielen Dank, es ist sehr hilfreich – Melek

Verwandte Themen