2013-05-16 12 views
5

używam następujące kroki, aby osiągnąć mój własny pakiet:Rcpp: dlaczego nie mogę uruchomić funkcji w moim zdefiniowanym pakiecie?

1) Staram się pisać bardzo prostą funkcję w następujący sposób:

#include <Rcpp.h> 
using namespace Rcpp; 

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

2) Używam szkielet, aby go w opakowaniu:

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

3) uruchomić CPP poleceniem:

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

4) Uruchom compileAttributes załadować pakiet:

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

Po tym chcę wywołać funkcję w R:

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

Następnie błąd jest:

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

"foo" nie dostępne dla .Call() dla pakietu "newpackage"

Spotkałem ten sam problem, ale nadal mogę nie wiem, co się dzieje. Czy możesz mi pomóc? Co jest nie tak z powyższymi krokami? Dzięki.

Odpowiedz

0

Z mojej głowie, wygląda całkiem kompletne, ale próbujcie

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> 

zarówno jako Rcpp modules i Rcpp attributes muszą być włączone.

Po tym czasie rzeczy powinny działać tak, jak wykonujesz wymagane compileAttributes.

Edytuj: To jest jeszcze prostsze. Po prostu wykonaj rozmowę Rcpp.package.skeleton() opisaną powyżej, czyli z dodanym attributes=TRUE po czym skończysz - zainstaluj pakiet i przetestuj go.

+1

Dziękuję za odpowiedź! Próbuję, ale kiedy używam foo <- function() { .Call ("foo", PACKAGE = "newpackage") } Spotkałem ten sam problem. Ale kiedy zmieniłem to w ten sposób: foo <- function() { .Call ("newpackage_foo", PACKAGE = "newpackage") } To działa. – user2380245

+0

Co zrobić, jeśli mam wiele plików C++? – qed

+0

Wszystkie zmienne w R są wektorami. Lista wszystkich w 'cpp_files'. –

Powiązane problemy