2013-07-15 9 views
36

Sto lavorando a un progetto che richiede l'esecuzione di alcuni codici R per l'analisi dei dati. Il progetto è principalmente in JavaScript e ho bisogno di un modo per eseguire il codice R da JS. La mia ricerca non ha ancora trovato un buon modo per farlo. C'è un modo per farlo?C'è un modo per eseguire codice R da JavaScript?

Inoltre, ho quasi nessuna esperienza con R (un'altra persona sta fornendo il codice R).

+0

Usi IE o altri browser ? Internet Explorer ha un meccanismo per scriptare Windows da javascript, ma dovresti regolare le tue impostazioni di sicurezza .... quindi usando 'Rscript.exe' puoi eseguire' yourScript.R' come questo 'var shell = new ActiveXObject (' WScript.Shell '); shell .Run ("Rscript yourScript.R arg1"); ' – agstudy

+0

Al momento, sto sviluppando in Chrome. Non penso che sarò facilmente in grado di cambiare. –

+0

Questo è Javascript * sul browser * destra? Questo è per un client web? Questo è importante, perché al giorno d'oggi JS non è solo una lingua del client Web e può essere eseguito come linguaggio con privilegi completi (vedere node.js) su una macchina, nonché una lingua sandbox in un browser web. – Spacedman

risposta

19

Se si sta facendo funzionare il codice R su un server, si dovrebbe dare un'occhiata a OpenCPU. Fornisce un'API REST e una libreria JavaScript corrispondente per l'invio del codice R al server e il recupero dei risultati. In particolare, si prende cura dei problemi di sicurezza che possono sorgere dall'esecuzione di R come server (il codice R può eseguire comandi di shell arbitrari, tra le altre cose). Esistono istanze demo pubbliche che è possibile utilizzare per provarlo e this page fornisce un semplice tutorial.

11

Che ne dici di R-node?

Penso che un altro alterativa sarebbe quella di utilizzare node.js come server (http://nodejs.org/) e chiamare R dall'interno come un processo figlio, la ricerca di documentazione API Node.js per specifiche.

un'occhiata anche a questo per la conferma: Is it possible to execute an external program from within node.js?

Nota: nodo può eseguire qualsiasi script JS (s) si può avere, che non necessariamente devono essere specifici nodi.

+0

Potresti aggiungere una spiegazione del nodo R? –

+1

Certo, non l'ho provato personalmente, ma questo è citato direttamente da gitourious, bastava cliccare quel piccolo altro ... link :) //// R-Node è un front-end Web per il pacchetto di analisi statistica R. Utilizzando questo front-end, è possibile connettersi da qualsiasi browser Web a un'istanza R in esecuzione su un server remoto (o locale) e interagire con esso, inviare comandi e ricevere le risposte. In particolare, i comandi grafici come plot() e hist() verranno> eseguiti nel browser, disegnando il grafico come un'immagine SVG. –

+2

Sempre meglio avere le informazioni qui su SO, e ancora meglio nella risposta stessa. Le pagine Web hanno una brutta abitudine di spostarsi o essere modificate. Sembra un pacchetto utile, quindi spero che resterà. –

0

Questo non è assolutamente il modo migliore, ma sono stato in grado di eseguire quanto segue per il mio progetto Javascript + R (silly.r è uno script R che risiede nella directory "r"). Io fondamentalmente eseguito il codice R come un comando da terminale dal mio Server Express:

app.get('/sfunction', function (req, res) { 
 
    exec('Rscript r/silly.r this is a test', function(error, stdout, stderr) { 
 
     if (error) { 
 
      console.log(error); 
 
      res.send(error); 
 
     } 
 
     else if (stderr) { 
 
      console.log(stderr); 
 
      res.send(stderr); 
 
     } 
 
     else if (stdout) { 
 
      console.log("RAN SUCCESSFULLY"); 
 
      res.sendfile("savedoutput/test.json"); 
 
     } 
 
    }); 
 
});

Il codice è da linee 167-182 da qui: https://github.com/ngopal/VisualEncodingEngine/blob/master/jsserver/app.js

Problemi correlati