R-Skript in eigenständige EXE-Datei kompilieren?


84

Gibt es eine einfache Möglichkeit, mein RSkript in eine eigenständige .exeDatei zu kompilieren, genau wie es Matlab tut?


14
Sehr kurze Antwort: Nein, noch nie.
Dirk Eddelbuettel

2
Eigentlich würde ich es gerne verteilen, aber die Skripte und Algorithmen geheim halten. Gibt es eine Möglichkeit, dies oder eine andere Möglichkeit zu verschlüsseln, um diesen Zweck zu erreichen?
Joyce


1
@Joyce, um den Code auszublenden, besteht eine Standardlösung darin, die Anwendung auf einem Server zu verteilen. Ihre Benutzer würden sich also über einen Server verbinden. Sie könnten nicht nur den Code ausblenden, sondern Ihre Benutzer hätten auch immer Zugriff auf die aktuellste Version. Sie müssten jedoch eine Serverinfrastruktur einrichten (wahrscheinlich am besten, um einen R-Cloud-Anbieter zu verwenden).
Tripartio

1
Das Erstellen eines Pakets würde dazu beitragen, den allgemeinen Code zu verteilen. Auch ich habe versucht, eine Exe für alltägliche Aufgaben / Funktionen zu erstellen, Berechnungen, die sich immer wieder wiederholen. Und um eine Exe mit einigen zu teilen, die keine Codierung verwenden / eine UI-basierte App bevorzugen. Leider immer noch auf der Suche nach Wegen.
BonCodigo

Antworten:


28

Tatsächlich gibt es eine Möglichkeit, eine Lösung zu finden, die Ihren Anforderungen entspricht. Lesen Sie den Artikel zum Bereitstellen von Desktop-Apps mit R auf R-Bloggern. Wie im Artikel beschrieben, werden Sie am Ende ein paar Dinge mehr als eine einzelne exe-Datei verwenden.

Außerdem möchte ich Ihre Aufmerksamkeit auf das RGtk2 lenken, indem Sie das RGtk2 verwenden, mit dem Sie versuchen könnten, eine eigene Schnittstelle in R zu entwickeln. Wenn es darauf ankommt, vertraue ich darauf, dass Sie Ihren R-Code zusammen mit einer tragbaren Version von R und packen können Abhängigkeiten in einem Installationsprogramm und Make und App daraus, die eine Illusion einer einzelnen Exe-Datei erzeugen würden.

In Ihrer Frage haben Sie gefragt, ob es einfach ist , eine eigenständige ausführbare Datei zu entwickeln, die R-Code interpretiert. Ich würde nicht sagen, dass es einfach ist. Wenn Sie den starken Wunsch haben, einen R-Code in einer Anwendung auszuführen, können Sie dies mit RCaller für Java oder R.NET auf einfachere Weise tun .


1
Der verlinkte Artikel über das Bereitstellen von Desktop-Apps mit R ist wirklich gut (verwendet tragbare Apps und glänzend!), Thx!
R Yoda

2
@RYoda Ich bin froh das zu lesen. Es besteht Interesse an diesem Thema. Wenn Sie bei Shiny bleiben möchten, finden Sie in diesem Artikel interessante Tipps zum Packen einer Shiny-App als Windows-Desktop-App.
Konrad

Es ist auch möglich, die RCaller-Skript-Engine in der gesamten javax.script-API zu verwenden, siehe mhsatman.com/rcaller-3-0
jbytecode

11

Als Antwort auf Ihren Kommentar:

Eigentlich würde ich es gerne verteilen, aber die Skripte und Algorithmen geheim halten. Gibt es eine Möglichkeit, dies oder eine andere Möglichkeit zu verschlüsseln, um diesen Zweck zu erreichen?

Sie können dies (irgendwie) tun, indem Sie Funktionen mit speichern save(). Hier ist zum Beispiel eine Funktion, die f()Sie geheim halten möchten:

f <- function(x, y) {
  return(x + y)
}

Speichern Sie es überall:

save(f, file = 'C:\\Users\\Joyce\\Documents\\R\\Secret.rda')

Und wenn Sie die Funktion nutzen möchten:

load("C:\\Users\\Joyce\\Documents\\R\\Secret.rda")

Ich würde alle meine Funktionen in separaten Dateien speichern, sie in einem Ordner ablegen und ein einfaches altes .R-Skript haben, das sie alle lädt und alles ausführt. Reißverschluss das Ganze und verteile es an jeden. Vielleicht sogar in ein Paket kompilieren. Tatsächlich wäre das Ganze dann schreibgeschützt.

Diese Lösung ist allerdings nicht so toll. Sie können die Funktion weiterhin in R sehen, indem Sie den Namen der Funktion eingeben, damit sie nicht in diesem Sinne ausgeblendet wird. Wenn Sie jedoch die .rda-Dateien öffnen, wird deren Inhalt verstümmelt. Es hängt alles davon ab, wie erfahren die Empfänger Ihres Codes mit R sind.


Vielen Dank für den Vorschlag. Dies kann eine Möglichkeit sein, zu verhindern, dass andere die Codes direkt sehen. Nochmals vielen Dank.
Joyce

3
Es wird jedoch angezeigt, sobald Sie tippen f.
MAPK

4

Eine Form der Verschlüsselung von Code ist in der petalsFunktion im TeachingDemos-Paket implementiert.

Beachten Sie, dass zum Auffinden des versteckten Codes nur Programmierkenntnisse auf mittlerer Ebene erforderlich sind. Dies erfordert jedoch absichtliche Anstrengungen, und der Benutzer kann nicht behaupten, den Code versehentlich gesehen zu haben. Sie benötigen dann eine Lizenzvereinbarung, um keine Peeking-Vereinbarungen durchzusetzen.


Vielen Dank, Greg, ich schaue nur in die Funktion, die Sie erwähnt haben, kann aber nicht herausfinden, wie man damit die Codes versteckt. Würden Sie bitte näher darauf eingehen? Vielen Dank.
Joyce

@Joyce, die petalsFunktion verbirgt keinen Code. Dies ist ein Beispiel für das Ausblenden eines Schlüsselcodes (können Sie den Schlüssel lesen?). Für die Verschlüsselung (Bleichen) werden andere Tools benötigt. Ein einfacherer Ansatz wird unter stat.ethz.ch/pipermail/r-devel/2011-October/062236.html erläutert . Das Kompilieren von Bytes kann ebenfalls hilfreich sein, aber Sie benötigen wirklich eine Lizenzvereinbarung.
Greg Snow

3

Nun, Sie müssen R auf dem Bereitstellungscomputer installiert haben. Ich bin mir nicht sicher, ob dies möglich ist, um eine ausführbare Datei zu erstellen. Sie können jedoch ein anderes Programm erstellen, das Ihr R-Skript aufruft. R ist eine interpretierte Sprache. Es ist nicht möglich.


3
Haben wir Neuigkeiten zu einem R-Compiler? Ich habe angefangen, Python zu verwenden, und es gibt einfache Möglichkeiten, Exe-Dateien zu erstellen (z. B. py2exe und cx_freeze). Gibt es eine Chance, so etwas bald in R zu sehen?
Tony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.