Compilare lo script R in un file .exe autonomo?


87

Esiste un modo semplice per compilare il mio Rscript in un .exefile autonomo proprio come fa Matlab?


15
Risposta molto breve: No. Non lo è mai stato.
Dirk Eddelbuettel

2
In realtà vorrei distribuirlo ma mantenendo segreti gli script e l'algoritmo, c'è un modo per crittografarlo o un altro modo per raggiungere questo scopo?
Joyce


1
@Joyce, per nascondere il codice, una soluzione standard è distribuire l'applicazione su un server. Quindi, i tuoi utenti si connetteranno tramite server. Non solo sarai in grado di nascondere il codice, ma i tuoi utenti avranno anche accesso sempre alla versione più aggiornata. Tuttavia, è necessario stabilire un'infrastruttura server (probabilmente è meglio utilizzare un provider cloud R).
Tripartio

1
La creazione di un pacchetto aiuterebbe a distribuire il codice comune. Anch'io ho cercato di creare un exe per compiti / funzioni banali, calcoli che si ripetono ancora e ancora. E per condividere un exe con alcuni che non usano la codifica / preferiscono un'app basata sull'interfaccia utente. Purtroppo ancora alla ricerca di modi.
bonCodigo

Risposte:


28

È un dato di fatto che esiste un modo per ottenere una soluzione che soddisfi le vostre esigenze. Dai un'occhiata all'articolo sulla distribuzione di app desktop con R su R-Blogger. Come descritto in dettaglio nell'articolo, finirai per utilizzare alcune cose in più di un singolo file exe.

Inoltre vorrei attirare la tua attenzione su RGtk2 con l'uso di RGtk2 potresti provare a sviluppare la tua interfaccia in R. Se arriva il momento giusto, confido che potresti impacchettare il tuo codice R insieme a una versione portatile di R e dipendenze in un programma di installazione e make e app da quello, ciò creerebbe l'illusione di un singolo file exe.

Nella tua domanda hai chiesto se è facile sviluppare un file eseguibile autonomo che interpreti il ​​codice R. Non direi che è facile. Se hai un forte desiderio di eseguire un codice R da un'applicazione, potresti farlo in modo più semplice usando RCaller per Java o R.NET .


1
L'articolo collegato sulla distribuzione di app desktop con R è davvero buono (utilizza app portatili e brillanti!), Grazie!
R Yoda

2
@RYoda sono contento di leggerlo. C'è interesse per questo argomento. Se vuoi restare con Shiny, questo articolo fornisce consigli interessanti su come creare un'app Shiny come app desktop di Windows.
Konrad

è anche possibile utilizzare il motore di scripting RCaller attraverso l'API javax.script, vedere mhsatman.com/rcaller-3-0
jbytecode

11

In risposta al tuo commento:

In realtà vorrei distribuirlo ma mantenendo segreti gli script e l'algoritmo, c'è un modo per crittografarlo o un altro modo per raggiungere questo scopo?

Puoi (più o meno) farlo salvando le funzioni usando save(). Ad esempio, ecco una funzione f()che vuoi mantenere segreta:

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

Salvalo ovunque:

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

E quando vuoi usare la funzione:

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

Vorrei salvare tutte le mie funzioni in file separati, metterle in una cartella e avere un semplice vecchio script .R che le carica tutte dentro ed esegue qualsiasi cosa. Comprimi tutto e distribuiscilo a chiunque. Forse anche compilarlo in un pacchetto. In effetti l'intera cosa sarebbe di sola lettura allora.

Questa soluzione però non è eccezionale. Puoi ancora vedere la funzione in R digitando il nome della funzione in modo che non sia nascosta in quel senso. Ma se apri i file .rda i loro contenuti sono tutti confusi. Tutto dipende davvero dall'esperienza dei destinatari del codice con R.


Grazie per il suggerimento, può essere un modo per impedire ad altri di vedere direttamente i codici, grazie ancora.
Joyce

3
Ma apparirà una volta digitato f.
MAPK

4

Una forma di codice crittografato è implementata nella petalsfunzione nel pacchetto TeachingDemos.

Si noti che sarebbero necessarie solo abilità di programmazione di livello intermedio per trovare il codice nascosto, tuttavia ci vuole uno sforzo deliberato e l'utente non sarebbe in grado di affermare di aver visto il codice per sbaglio. Avresti quindi bisogno di un qualche tipo di contratto di licenza in atto per applicare eventuali accordi di non visualizzazione.


Grazie Greg, ho appena esaminato la funzione che hai menzionato, ma non riesco a capire come usarla per nascondere i codici, potresti gentilmente elaborare di più? Grazie mille.
Joyce

@Joyce, la petalsfunzione non nasconde il codice, è un esempio di avere nascosto un pezzo chiave di codice (puoi leggere il pezzo chiave?). Sono necessari altri strumenti per eseguire la crittografia (sbiancamento). Un approccio più semplice è discusso su: stat.ethz.ch/pipermail/r-devel/2011-October/062236.html . Anche la compilazione dei byte può aiutare, ma hai davvero bisogno di un qualche tipo di contratto di licenza.
Greg Snow

3

Bene, avrai bisogno di R installato sulla macchina di distribuzione. Per quanto riguarda la creazione di un eseguibile, non sono sicuro che sia possibile. Ma puoi creare un altro programma che invoca il tuo script R. R è un linguaggio interpretato. Non è possibile.


3
Abbiamo notizie su qualche compilatore R? Ho iniziato a usare python e ci sono modi semplici per produrre file exe (py2exe e cx_freeze per esempio). C'è qualche possibilità di vedere presto qualcosa di simile in R?
Tony
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.