2017-10-14 3 views
0

Dies ist eine überarbeitete Fragemehrdeutig Überlastung Betreiber speziell in RCPP

In r und RCPP Ich habe eine Zeichenfolge deklariert als string def; ich auch ein Datenrahmen Row_Labels genannt haben, die aus zwei Buchstaben bestehenden Strings enthält, „AA“, „BB“ usw. Jetzt versuche ich, dies zu tun ..

#include <Rcpp.h> 
#include <string.h> 
//using namespace Rcpp; 
//using namespace std; 


// [[Rcpp::export]] 
Rcpp::DataFrame process_Data(Rcpp::DataFrame df,Rcpp::DataFrame Row_Labels, Rcpp::DataFrame Column_Labels){ 

    Rcpp::Rcout << "Test value from 'cout' " << std::endl; 
    Rcpp::Rcout << "Number of rows in df = " << df.nrow() << std::endl; 

    std::string abc; 
    abc = "test value"; 
    std::string def; 
    def = "zz"; 

    for(int i = 0; i < Row_Labels.nrow() ; i++) 
    { 

     def = Row_Labels[i]; // error here 

     Rcpp::Rcout << "Row_Labels = " << i; 
     Rcpp::Rcout << i << " " << Row_Labels[i] << std::endl; // error here 

    } 


    return Rcpp::DataFrame::create(Rcpp::_["a"]= df); 

} 

ich eine Störung erhalte, das ist ... use of overload operator'=' is ambiguous (with operand types 'string' (aka 'based_string <char, char traits <char>, allocator <char> >') and 'Proxy' (aka 'generic proxy<19>'))

ich schätze die Hilfe und hoffen, dass diese Revision mehr hilfreich

+0

Verwenden Sie nicht 'using Namespace Rcpp; namespace std verwenden; 'Explizite' :: 'references verwenden. –

+0

Stellen Sie vollständige und reproduzierbare Beispiele zur Verfügung. Das ist keiner. –

+0

Danke. Ich habe die beiden Namespace-Anweisungen entfernt. Der Fehler tritt immer noch auf. Ich habe versucht, die komplette Funktion hier einzufügen, bekam aber Fehler. – K17

Antwort

1

Sie haben einen ziemlich einfachen Fehler dort: Wenn Zeilen- und Spaltenbeschriftungen vom Typ DateFrame sind, dann können Sie nicht indexieren, wie Sie in Row_Labels[i]; tun - das sind keine Vektoren. Fix: Benutze stattdessen Vektoren. Dies erfordert auch die Verwendung von length() statt nrow(). Also die folgenden kompiliert gut:

Ich auch angezogen und verkürzen es ein wenig.

+0

Danke. Wenn ich das mit Datenrahmen von R anrufe, wird dann nicht die Verwendung von Vektoren ein Problem verursachen, wenn die Funktion aufgerufen wird? – K17

+0

Nun, der Beweis ist, ob es funktioniert, und es tut. Vielen Dank für die Lektion. – K17

+1

Und Sie können 'DataFrame' natürlich verwenden, um Vektoren usw. zu übertragen, müssen diese dann aber extrahieren. Weitere Beispiele finden Sie in der [Rcpp Gallery] (http://gallery.rcpp.org). –

Verwandte Themen