R aus C — Möglichst einfache Helloworld
Was ist die einfachste mögliche C-Funktion für das starten der R-interpreter auf und übergeben dabei einen kleinen Ausdruck (z.B. 2+2), und aus dem Ergebnis? Ich versuche es zu kompilieren mit MingW auf Windows.
- Für welches Betriebssystem?
- guter Punkt... geklärt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie anrufen möchten, R aus C?
Blick auf Abschnitt 8.1 in der Schrift R-Erweiterungen Handbuch. Sie sollten auch einen Blick in die "tests" - Verzeichnis (download der source-Paket entpacken Sie es und Sie werden die tests Verzeichnis). Eine ähnliche Frage wurde zuvor gebeten, auf R-Help und hier war das Beispiel:
Dem einfachen Beispiel aus dem R-Handbuch ist in etwa so:
Übrigens, möchten Sie vielleicht zu prüfen, mit Rinside statt: Dirk bietet ein nettes "Hallo Welt" - Beispiel auf der Projekt-homepage.
In der Sie interessiert sind, aufrufen von C aus R, hier ist meine ursprüngliche Antwort:
Dies ist nicht gerade "hello world", aber hier sind einige gute Ressourcen:
Hier gehen Sie. Es ist die wichtigste Funktion, aber Sie sollten in der Lage sein, um eine Anpassung an eine mehr Allgemeine Funktion. Dieses Beispiel baut eine R-expression von C-Aufrufe und auch von einem C-string. Sie sind auf Ihre eigenen für das kompilieren auf windows, aber ich habe Schritte kompilieren unter linux:
Kompilieren vor:
Ich glaube nicht, dass jeder der oben genannten hat die Frage beantwortet - das war die Bewertung 2 + 2 ;). Für die Verwendung eines string-Ausdruck wäre etwas wie:
Diese fehlt Fehler überprüfen, das ist klar, aber funktioniert:
(Um die richtigen Befehle für Ihre R Verwendung
R CMD SHLIB e.c
die Ihnen die entsprechenden compiler-flags)Können Sie auch konstruieren, die expression von hand, wenn es einfach genug ist - z.B., für
rnorm(10)
verwenden SieIch denke, Sie können nicht viel besser als die inline - Paket (unterstützt C, C++ und Fortran):
die print 'Hallo, Welt' für Sie. Und Sie wissen gar nicht, wo /wie /Wann der compiler und linker aufgerufen werden. [ Die R_NilValue ist R NULL-version einer SEXP und die
.Call()
Signatur hier verwendet, erfordert, dass Sie wieder ein SEXP-siehe die 'Writing R Extensions' - Handbuch, das kann man nicht wirklich vermeiden hier. ]Sie werden dann nehmen Sie diesen code und wickeln Sie es in ein Paket. Wir hatten großen Erfolg mit über
inline für die
Rcpp unit-tests (über 200 und zählen jetzt) und einige Beispiele nennen.
Oh, und das inline Beispiel funktioniert auf jedem OS. Sogar windoof-vorausgesetzt, Sie haben das R-Paket Gebäude-tool chain installiert, im PFAD etc pp.
Edit: ich falsch verstanden, die Frage. Was Sie wollen, ist im Grunde das, was die littler front-end macht (mit pure C) und was die RInside Klassen berücksichtigt-out für C++.
Jeff und ich nie die Mühe mit der Portierung littler zu windoof, aber RInside funktionierte es in der neuesten Version. So sollten Sie in der Lage sein, zu stecken um das erstellen von Rezepten und erstellen einer C # -Variante von RInside, so dass Sie ernähren können Ausdruck einer embedded R-Prozess. Ich vermute, Sie wollen immer noch so etwas wie Rcpp für die Ahnung, es wird langweilig sonst.
Edit 2: Und als Shane erwähnt, es gibt ja ein paar Beispiele in den R Quellen, die in tests/Einbetten/zusammen mit einem Makefile.gewinnen. Vielleicht ist das der einfachste start, wenn Sie bereit sind zu erfahren über R Interna.