2016-04-05 8 views
1

Zuerst weiß ich, das ist wahrscheinlich eine Rcpp-Devel-Funktion, aber wenn ich versuche, mit Firefox oder Chrome abonnieren, bekomme ich einen Fehler bei meiner Arbeit Ethernet, dass die Verbindung nicht sicher ist, also ich Ich muss hier erst einmal nachfragen.Rcpp kompilierte Attribute nicht für Anruf verfügbar

Also kaufte ich Dirks Buch und es ist ausgezeichnet geschrieben.

Ich erhalte einen ähnlichen Fehler hier https://www.mail-archive.com/rcpp-devel%40lists.r-forge.r-project.org/msg08059.html

Sage<-testArm(set,labels,contrast,geneSets,var.equal=FALSE) 
Calculating comparisons...Error in .Call("sigmaCalc", PACKAGE = "mySage") :  
"sigmaCalc" not available for .Call() for package "mySage" 

Note, mein Adreßraum die useDynLib (MySafe) hat, und ich kann compileAttributes und R CMD Build (in einem externen Verzeichnis) erfolgreich ausgeführt und installieren Paket erfolgreich.

wenn ich versuche, eine der RcppExport.R Funktionen aufzurufen, erzeuge ich den Fehler

hier eine meiner Cpp-Codes ist

//[[Rcpp::depends(RcppArmadillo)]] 
#include <RcppArmadillo.h> 
#include <algorithm> 
#include <vector> 
#include <Rcpp.h> 
#include <math.h> 
#include <R.h> 
using namespace arma; 
using namespace Rcpp; 
//'calculates the sd and mindof in order , names are assigned in R, as of  now, there is no NA error checking. not very robust 
//' @param SDs standard deviations from geneResults returned by  makeComparison 
//' @param DOFs degrees of freedom from geneResults returned by makeComparison 
//' @param geneSets a set of genes for enrichment testing 
//' @export 
//' @return a List with SumSigma and MinDof 
//[[Rcpp::export]] 
List sigmaCalc(SEXP SDs, SEXP DOFs, SEXP geneSets) { 
Rcpp::NumericVector SD(SDs); 
Rcpp::NumericVector DOF(DOFs); 
Rcpp::List geneSet(geneSets); 
more code .... 

die hier Kommentare erhalten erstellt und Export in die R namespace richtig ist hier die RcppExports.R

# This file was generated by Rcpp::compileAttributes 
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 

#'calculates the sd and mindof in order , names are assigned in R, as of now, there is no NA error checking. not very robust 
#' @param SDs standard deviations from geneResults returned by makeComparison 
#' @param DOFs degrees of freedom from geneResults returned by makeComparison 
#' @param geneSets a set of genes for enrichment testing 
#' @export 
#' @return a List with SumSigma and MinDof 
sigmaCalc <- function(SDs, DOFs, geneSets) { 
.Call('mySage_sigmaCalc', PACKAGE = 'mySage', SDs, DOFs, geneSets) 
} 

hier die RcppExport.cpp ist

// This file was generated by Rcpp::compileAttributes 
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 

#include <RcppArmadillo.h> 
#include <Rcpp.h> 

using namespace Rcpp; 

// sigmaCalc 
List sigmaCalc(SEXP SDs, SEXP DOFs, SEXP geneSets); 
RcppExport SEXP mySage_sigmaCalc(SEXP SDsSEXP, SEXP DOFsSEXP, SEXP geneSetsSEXP) { 
BEGIN_RCPP 
Rcpp::RObject __result; 
Rcpp::RNGScope __rngScope; 
Rcpp::traits::input_parameter<SEXP>::type SDs(SDsSEXP); 
Rcpp::traits::input_parameter<SEXP>::type DOFs(DOFsSEXP); 
Rcpp::traits::input_parameter<SEXP>::type geneSets(geneSetsSEXP); 
__result = Rcpp::wrap(sigmaCalc(SDs, DOFs, geneSets)); 
return __result; 
END_RCPP 
} 

Ich bin mir nicht sicher über mehrere Dinge, sind Header-Dateien erforderlich? Der Text schlägt vor, dass rcpp_hello_world.h benötigt wird, aber nach dem Lesen der RcppExport.cpp ist die cpp-Funktionsdeklaration in der Export.cpp enthalten, so dass ich nicht sicher bin, dass ich deklarative Header-Dateien schreiben muss. auch networkBMA, wordcloud und pcaMethods sind alle Rcpp-Pakete und sie enthalten keine Header, also sind Header notwendig, um nur eine API zu verbinden?

die andere Sache, die diesen Fehler verursachen kann, ist, dass meine Funktionsparameter SEXP Objekte sind und nicht Rcpp: NumericVectors .../NumericMatrix, sollte ich den cpp-Code sigmaCalc schreiben, um Rcpp-Typen einzugeben, und dann sicherstellen, dass der Export. cpp-Funktionen für das SEXP-Casting?

danke.

P.S. hier meine makevars in src ist/

## Use the R_HOME indirection to support installations of multiple R version 
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) 
PKG_CXXFLAGS=`$(R_HOME)/bin/Rscript -e "Rcpp:::CxxFlags()"` 

ich den Fehler htink ist, dass ich Eingang sexp als Eingang in die CPP funcitons bin, dies ist nur erforderlich, wenn sourceCpp Protoyping von C gehen ++ bis R, wenn Verpackung, die RcppExports .cpp ist der Vermittler zwischen den beiden Systemen.

Antwort

2

Der Beitrag ist ziemlich lang und es ist schwierig, die Struktur zu sehen. Ich empfehle Ihnen, über Start und einer der beiden

  • Anruf Rcpp.package.skeleton() und studieren das Paket tun, oder
  • Verwendung RStudio ein Paket für Sie, oder
  • verwenden, um ein Beispiel-Paket wie RcppExamples
zu erstellen

Beginnen Sie mit diesen, bauen Sie sie um. Fügen Sie dann langsam Ihre Funktion hinzu, führen Sie compileAttributes() aus und erstellen/installieren Sie neu.

+0

wird tun. Ich wollte keinen Downvote für eine spärliche Frage. Updates bald.tyvm – arcolombo

+0

sind Header-Dateien erforderlich, wenn ich nicht außerhalb C++ Code importieren? – arcolombo