2013-05-16 8 views
5

Ich verwende die folgenden Schritte mein eigenes Paket zu erreichen:Rcpp: Warum kann ich die Funktion in meinem definierten Paket nicht ausführen?

1) Ich versuche, eine sehr einfache Funktion zu schreiben, wie folgt:

#include <Rcpp.h> 
using namespace Rcpp; 

// [[Rcpp::export]] 
int foo() { 
return 6; 
} 

2) Ich verwende Skelett es in ein Paket zu machen:

Rcpp.package.skeleton("newpackage",example_code=FALSE,cpp_files=c("New.cpp")) 

3) I laufen CPP mit Befehl:

source("~/newpackage/src/New.cpp") 

4) laufen compileAttributes das Paket laden:

compileAttributes(pkgdir="/home/tw72/newpackage",verbose = getOption("verbose")) 

Danach möchte ich die Funktion in R nennen:

foo <- function() 
{ 
.Call("foo",PACKAGE="newpackage") 
} 

Dann ist der Fehler:

Error in .Call("foo", PACKAGE = "newpackage") : 

"foo" nicht verfügbar für .Call() für Paket "newpackage"

Ich traf die gleiche problem, aber ich kann immer noch nicht herausfinden, was passiert. Können Sie mir helfen? Was ist los mit meinen obigen Schritten? Vielen Dank.

Antwort

0

Von der Spitze von meinem Kopf, sieht es ziemlich vollständig, aber versuchen Sie

R> Rcpp.package.skeleton("newpackage", 
+      example_code=FALSE,  ## useful but not required 
+      cpp_files=c("New.cpp"), ## may not be required 
+      attributes=TRUE)   ## this is important 
R> 

als beide Rcpp modules und Rcpp attributes müssen eingeschaltet werden.

Danach sollten die Dinge funktionieren, wie Sie die erforderlichen compileAttributes tun.

Edit: Es ist noch einfacher. Tun Sie einfach den Rcpp.package.skeleton() Anruf, den ich oben beschrieben habe, das ist mit dem hinzugefügten attributes=TRUE, nach dem Sie fertig sind - installieren Sie das Paket und testen Sie es.

+1

Vielen Dank für Ihre Antwort! Ich versuche aber, wenn ich foo <- function() { .Call ("foo", PAKET = "NewPackage") } traf ich das gleiche Problem. Aber wenn ich es auf diese Weise änderte: foo <- function() { .Call ("newpackage_foo", Paket = "newpackage") } Es funktioniert. – user2380245

+0

Was passiert, wenn ich mehrere C++ - Dateien habe? – qed

+0

Alle Variablen in R sind Vektoren. Listen Sie alle in 'cpp_files' auf. –