C für R-Programmierer – empfohlene Ressourcen/Ansätze, sobald die Grundlagen überschritten sind [closed]

Lesezeit: 7 Minuten

Benutzer-Avatar
Heather Turner

Ich möchte meine C-Kenntnisse verbessern, um kompetenter bei der Konvertierung von R-Code in C zu sein, wo dies nützlich wäre. Welche Hinweise haben die Leute, die mir auf meinem Weg helfen?

Hintergrund: Ich habe vor ein paar Jahren an einem Online-Kurs zur Einführung in C teilgenommen und das plus Schreiben von R-Erweiterungen und S-Programmierung (Venables & Ripley) hat es mir ermöglicht, Engpassoperationen nach C zu konvertieren, zB das Berechnen des Produkts von Untermatrizen (habe ich da das Rad neu erfunden?). Ich möchte jedoch etwas darüber hinausgehen, z. B. größere Code-Blöcke konvertieren, Routinen der linearen Algebra verwenden usw.

Zweifellos muss ich mehr aus den Ressourcen lernen, die ich zuvor verwendet habe, aber ich habe mich gefragt, ob es andere gibt, die die Leute empfehlen? Das Durcharbeiten von Beispielen ist offensichtlich eine Möglichkeit, mehr zu lernen: Brian Ripley hat in diesem Workshop einige Beispiele für den Wechsel von S-Prototypen zu S+C gegeben Effizientes Programmieren in S und ein neuerer Bioleiter-Workshop Advanced R für Bioinformatik (Entschuldigung, ich kann keinen Hyperlink posten) enthält ein Labor zum Schreiben eines R+C-Algorithmus. Mehr davon oder andere Vorschläge wären willkommen.

Benutzer-Avatar
Dirk Edelbüttel

Das ist eine sehr interessante Frage. Zufälligerweise hatte ich C und C++ gelernt, bevor ich zu R wechselte, sodass es für mich möglicherweise „einfacher“ war, C/C++ zu R hinzuzufügen.

Aber selbst damit wäre ich einer der Ersten, der sagt, dass das Hinzufügen von reinem C zu R höllisch kompliziert ist, weil Sie auf C-Ebene verschiedene Makros und R-Interna lernen müssen.

Was mich zu meinem Lieblingsargument führt: Verwenden Sie eine zusätzliche Abstraktionsschicht wie die Rcpp Paket. Es verbirgt viele der bösen Details. Und ich hoffe, dass Sie nicht viel C++ wissen müssen, um davon Gebrauch zu machen. Ein Beispiel für ein Paket, das es verwendet, ist das small Erdemovdist Paket auf R-Forge, das verwendet
Rcpp Wrapper-Klassen, um eine bestimmte Metrik zu verbinden.

Bearbeiten 1: Siehe zum Beispiel die Hauptfunktion von earthmovdist hier was hoffentlich gut lesbar sein sollte, evtl. mit dem (kurzen)
Rcpp Wrapper-Klassen-Pakethandbuch zur Seite.

Bearbeiten 2: Drei kurze Gründe, warum ich C++ für geeigneter halte und R-ähnlich:

  • verwenden Rcpp Wrapper-Klassen bedeutet, dass Sie niemals PROTECT und UNPROTECT verwenden müssen, was eine häufige Fehlerquelle und Heap-Beschädigung ist, wenn es nicht zugeordnet ist

  • verwenden Rcpp und mit STL-Containerklassen wie vector etc bedeutet, dass Sie nie explizit aufrufen müssen malloc() / free() oder new / deletewas eine weitere häufige Fehlerquelle beseitigt.

  • Rcpp ermöglicht es Ihnen, alles einzupacken try / catch Blöcke auf C++-Ebene und meldet die Ausnahme an R zurück – also keine plötzlichen seg.faults und Programmtode.

Allerdings ist die Wahl der Sprache eine sehr persönliche Entscheidung und viele Anwender sind natürlich mit der unterlagerten Schnittstelle zwischen C und R bestens zufrieden.

  • Das ist interessant – nicht etwas, das ich in Betracht gezogen hatte. Ihre Argumente sind ziemlich überzeugend, aber ich habe mich noch nie mit C++ befasst, also müsste ich zuerst ein bisschen Hausaufgaben machen.

    – Heather Turner

    18. September 2009 um 10:04 Uhr

  • Ich bin mit C/C++ nicht vertraut, aber ich habe ein Paket geerbt, das C verwendet, und ich nehme an, dass C++ etwas abwärtskompatibel mit C ist – ist das der Fall? Ist es einfach / sinnvoll, C-> C ++ zu migrieren, nur um Rcpp zu nutzen?

    – Abe

    8. März 2013 um 23:15 Uhr

  • In erster Näherung ist C++ eine Obermenge. Sie können also Rcpp nutzen, um die bestehenden C-basierten Pakete zu warten.

    – Dirk Edelbüttel

    9. März 2013 um 3:35 Uhr

Benutzer-Avatar
lückenhaft

Ich habe auch mit diesem Problem zu kämpfen.

Wenn es darum geht, die Beherrschung von C zu verbessern, gibt es viele Bücherlisten zu diesem Thema. Sie alle beginnen mit K&R. Ich genoss „Expert C Programming“ von P. van der Linden und „C Primer“ von S. Prata. Jeder Verweis auf die C-Standardbibliothek funktioniert.

Wenn das Problem darin besteht, C mit R zu verbinden, außer dem oben genannten offiziellen R-Dokument, können Sie dies überprüfen Harvard-Kursund das Schnellstartanleitung. Ich habe nur Skalare und Arrays an C übergeben und würde ehrlich gesagt nicht wissen, wie man komplexe Datenstrukturen verbindet.

Wenn das Problem darin besteht, C++ mit R zu verbinden oder C++-Fähigkeiten aufzubauen, kann ich nicht wirklich antworten, da ich nicht viel C++ verwende. Ein guter Ausgangspunkt für mich war “C++ the Core Language” (O’Reilly). Sehr einfach, primitiv, aber nützlich für Leute, die aus C kommen.

  • Ich wähle diese Antwort aus, da sie für meinen jetzigen Standort am relevantesten erscheint. Der Harvard-Kurs wird nützlich sein, um C zu überarbeiten, mich in C++ einzuführen (siehe Kommentar zu Dirks Antwort) und sich auf die Verwendung von C/C++ in R konzentrieren.

    – Heather Turner

    18. September 2009 um 10:06 Uhr

Benutzer-Avatar
Shane

Meine primäre Empfehlung ist, sich andere Pakete anzusehen. Natürlich verwenden nicht alle Pakete C-Code, also müssen Sie Beispiele finden, die dies tun. Sie können den Quellcode für alle Pakete von CRAN herunterladen, und in einigen Fällen Sie können sie auch auf R-Forge durchsuchen. Einige R-Projekte werden auch auf Google Code gepflegt oder Seiten wie github (zum Beispiel ggplot2). Den C-Code finden Sie im Verzeichnis „src“.

Denken Sie im Allgemeinen darüber nach, was Sie zu erreichen versuchen, und schauen Sie sich dann Pakete an, die ähnliche Dinge tun.

Das Buch „C Programming Language“ ist wahrscheinlich immer noch das am weitesten verbreitete, also sollten Sie es vielleicht in Ihrem Bücherregal haben. Das folgende kostenlose Buch ist auch eine nützliche Ressource: http://publications.gbdirect.co.uk/c_book/

  • Ich habe nur zufällig geklickt github.com/pjotrp/rqtl/blob/master/src/fitqtl_hk.c Link, den Sie dem Anfänger zur Verfügung stellen. Denken Sie, dass die Verwendung von ***p ein guter Anfang ist? Hat R Zeiger?

    – Lukas Rahne

    16. September 2009 um 8:47 Uhr

  • Nun, es ist sinnvoll, von denen zu lernen, die einen ähnlichen Weg gegangen sind (auch wenn ihr Code vielleicht nicht das perfekte Beispiel ist). Ich habe eine Kopie von K&R (2. Auflage), die früher meinem Vater gehörte – schön zu wissen, dass es immer noch als nützlich angesehen wird 🙂

    – Heather Turner

    18. September 2009 um 10:02 Uhr

Benutzer-Avatar
Richie Baumwolle

“Was ist das beste Buch, um C zu lernen?” ist eine beständige SO-Frage. (Der mittlere Link ist wahrscheinlich der beste.)

Was R-spezifische Methoden zum Erlernen von C betrifft, so fand ich es aufschlussreich, den R-Quellcode herunterzuladen und einen Blick auf den .Internal-Code zu werfen.

BEARBEITEN: Jemand anderes hatte gerade gefragt “Was soll man nach K&R lesen?”

Wenn Sie C verwenden möchten, um Engpässe zu beseitigen, benötigen Sie eine gute numerische Bibliothek in C. Es gibt viele, aber ich fand gsl (GNU Scientific Library) ziemlich nützlich.

http://www.gnu.org/software/gsl/

Es gibt auch das klassische Buch “Numerische Rezepte in C”, das einen Überblick über wichtige numerische Techniken bietet (obwohl ich nicht empfehle, ihren Code wörtlich zu verwenden).

  • Ich bin mir nicht sicher, wie nützlich das in meinem Fall ist. Ich schreibe Code für R-Pakete und ich denke, die Verwendung von gsl-Code würde bedeuten, dass meine Pakete erfordern würden, dass Benutzer gsl auf ihrem Computer haben? Ich würde es vorziehen, mich nur auf Code zu verlassen, der mit R verteilt wird (oder über CRAN verfügbar ist). Korrigiert mich, wenn ich das falsch verstehe!

    – Heather Turner

    18. September 2009 um 10:15 Uhr

  • Ich bin mir nicht sicher, wie nützlich das in meinem Fall ist. Ich schreibe Code für R-Pakete und ich denke, die Verwendung von gsl-Code würde bedeuten, dass meine Pakete erfordern würden, dass Benutzer gsl auf ihrem Computer haben? Ich würde es vorziehen, mich nur auf Code zu verlassen, der mit R verteilt wird (oder über CRAN verfügbar ist). Korrigiert mich, wenn ich das falsch verstehe!

    – Heather Turner

    18. September 2009 um 10:15 Uhr

1374020cookie-checkC für R-Programmierer – empfohlene Ressourcen/Ansätze, sobald die Grundlagen überschritten sind [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy