Hadley,
Sie können definitiv C ++ - Code schreiben, der dem C-Code ähnlich ist.
Ich verstehe, was Sie über C ++ sagen, das komplizierter als C ist. Dies ist, wenn Sie alles beherrschen möchten: Objekte, Vorlagen, STL, Vorlagen-Metaprogrammierung usw. Die meisten Menschen brauchen diese Dinge nicht und können sich einfach auf andere verlassen dazu. Die Implementierung von Rcpp ist sehr kompliziert, aber nur weil Sie nicht wissen, wie Ihr Kühlschrank funktioniert, heißt das nicht, dass Sie die Tür nicht öffnen und frische Milch holen können ...
Aus Ihren vielen Beiträgen zu R fällt mir auf, dass Sie R etwas langweilig finden (Datenmanipulation, Grafiken, String-Manipulation usw.). Bereiten Sie sich mit der internen C-API von R auf viele weitere Überraschungen vor. Dies ist sehr mühsam.
Von Zeit zu Zeit las ich die R-Exts- oder R-Ints-Handbücher. Das hilft. Aber die meiste Zeit, wenn ich wirklich etwas herausfinden möchte, gehe ich in die R-Quelle und auch in die Quelle von Paketen, die zB Simon geschrieben hat (dort gibt es normalerweise viel zu lernen).
Rcpp wurde entwickelt, um diese langwierigen Aspekte der API zu beseitigen.
Sie können anhand einiger Beispiele selbst beurteilen, was Sie komplizierter, verschleierter usw. finden. Diese Funktion erstellt mithilfe der C-API einen Zeichenvektor:
SEXP foobar(){
SEXP ab;
PROTECT(ab = allocVector(STRSXP, 2));
SET_STRING_ELT( ab, 0, mkChar("foo") );
SET_STRING_ELT( ab, 1, mkChar("bar") );
UNPROTECT(1);
}
Mit Rcpp können Sie dieselbe Funktion schreiben wie:
SEXP foobar(){
return Rcpp::CharacterVector::create( "foo", "bar" ) ;
}
oder:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
Wie Dirk sagte, gibt es andere Beispiele auf den verschiedenen Vignetten. Wir weisen die Leute normalerweise auch auf unsere Unit-Tests hin, da jeder von ihnen einen ganz bestimmten Teil des Codes testet und etwas selbsterklärend ist.
Ich bin hier offensichtlich voreingenommen, aber ich würde empfehlen, sich mit Rcpp vertraut zu machen, anstatt die C-API von R zu lernen, und dann zur Mailingliste zu kommen, wenn etwas unklar ist oder mit Rcpp nicht machbar erscheint.
Wie auch immer, Ende des Verkaufsgesprächs.
Ich denke, es hängt alles davon ab, welche Art von Code Sie irgendwann schreiben möchten.
Romain