2017-06-22 7 views
0

bemerkte ich, dass einzigartige Funktion von RCPP die ErgebnisseRCPP einzigartige Ordnung Ausgang

evalCpp("unique(IntegerVector::create(6,6,1,5,5,1))") 
[1] 6 5 1 
unique(c(6,6,1,5,5,1)) 
[1] 6 1 5 

bestellt Gibt es eine Möglichkeit, dies zu vermeiden? Danke für Ihre Hilfe

Antwort

1

Wenn Sie sich die (kurze) Quelldatei ansehen, sehen Sie, dass sie eine interne Klasse IndexHash verwendet. Ich vermute, dass dieser standardmäßig sortiert wird.

Wenn die ursprüngliche Reihenfolge von größter Bedeutung ist, könnte ich Ihnen einen neuen Convenience-Wrapper schreiben. Es kann nicht so schwer sein: auf die Gefahr hin, ein paar Bytes an Speicher zu verschwenden, einen temporären logischen Vektor zuweisen, einen Standard-Hashmap verwenden und über den eingehenden Vektor schleifen. Fragen Sie für jeden Wert, ob die Hashmap diesen Wert gesehen hat, speichern Sie die boolesche Antwort. Verwenden Sie das dann, um den ursprünglichen Vektor zu indizieren.

Zufällig ist dies sogar irgendwo implementiert. Siehe auch Armadillo und Eigen für Utility-Funktionen.

+0

Vielen Dank für diese Details. Tatsächlich habe ich festgestellt, dass der einfachste Weg in meinem Fall darin besteht, die R-Funktion innerhalb des Rcpp-Programms aufzurufen! – user3507085