PDA

View Full Version : Javascript e linguaggio R


gabmac2
10-09-2017, 08:59
Esiste un modo efficiente per eseguire da Javascript uno script R come si può fare in PHP o Python?
Grazie in anticipo

Shirov
10-09-2017, 16:27
C'era questa discussione su Stackoverflow

https://stackoverflow.com/questions/17665565/is-there-a-way-to-run-r-code-from-javascript

gabmac2
10-09-2017, 17:46
grazie,
avevo già visto questa discussione
Sembra però sia meno "rapido" rispetto ad altri linguaggi

gabmac2
10-09-2017, 18:44
ad esempio Node.js è una buona idea?

pabloski
11-09-2017, 11:12
ad esempio Node.js è una buona idea?

non ci sono molte altre possibilita'

non esiste un interfaccia FFI da R a Javascript o viceversa, per cui l'unico metodo sensato e' usare i socket per farli comunicare

inoltre considera che R e' un linguaggio creato specificamente per l'analisi dei dati, in questo e' un sostituto di Matlab, Mathematica, Octave

non e' sicuramente un generale usato alla stregua di C, C++, C#, Java, Rust, Javascript, ecc...

ha un minimo di binding per alcuni widget toolkit, per cui e' difficile creare ad esempio interfacce grafiche con R e R stesso non viene usato in questo modo, cioe' per creare programmi per l'utente, ma e' l'utente stesso ad usare R ( ovviamente gli utenti in questo caso sono scienziati, ingegneri e altre gente del mondo tecnico )

quindi non pensare di poter usare R al posto di un Java o C++, ti creeresti solo un mucchio di problemi

gabmac2
11-09-2017, 14:25
certamente,
però a livello statistico non è così pessimo,no?
in Python ci sono librerie per tale scopo. in PHP e Javascript sembra un pò meno

gabmac2
11-09-2017, 15:30
su questo senza dubbio, certo
ad esempio su Python ci sono librerie tipo Numpy
In PHP e Javascript non è che si trovi tantissimo (per certi versi è anche normale, il loro scopo non è quello)

pabloski
11-09-2017, 16:43
ad esempio su Python ci sono librerie tipo Numpy


Ma quello che fai in Python e Numpy con 10 righe di codice, lo fai con R in 1 riga. E' questo il punto. I linguaggi nascono per rendere semplice la vita al programmatore. Per questo ce ne sono tanti, altrimenti ne basterebbe uno soltanto.

Per cui non esiste il linguaggio unico che puo' sostituirli tutti. Bene o male, un programmatore dovra' imparare n linguaggi nel corso della sua carriera. Tanto per dire, pochi mesi fa ho dovuto avviare un progetto in C#/WPF, nonostante non nutra nessuna simpatia per MS e in passato non abbia mai nemmeno contemplato di buttarmi su .NET.

Eppure e' successo...

Ogni linguaggo ha la sua ragion d'essere. Alcuni linguaggi finiscono nel cestino perche' sostituiti da altri migliori.

Il punto e' che non si parte dal linguaggio e poi si va a cercare un progetto da implementare. Si parte dal progetto e si scelgono i linguaggi migliori per implementarlo.

Se sviluppi software di trading per Goldman Sachs, difficilmente non considererai per primo Haskell. Se invece sviluppi sistemi per l'avionica, considereresti Ada. Purtroppo molti ( quelli americani in particolari ) sono C e C++ con qualche spruzzata di Java. E infatti il F-35 quasi non riesce ad alzarsi da terra :D

gabmac2
11-09-2017, 17:45
il perno era R perchè va bene per data mining e apprendimento automatico (tra le altre cose)
Poter richiamare uno script R da Python e PHP è una buona cosa
Con Javascript l' unica via sembra Node.js. E' una buona strada?

gabmac2
11-09-2017, 18:16
sfruttare R utilizzandolo in altri linguaggi non mi sembra un "mischione"

gabmac2
11-09-2017, 18:45
usare un pò di modestia non farebbe male.....
non era quello che intendevo, comunque fa niente

gabmac2
11-09-2017, 19:43
di usare 100000 linguaggi in un progetto ok,
però se c' è uno script di oltre 1000 righe già implementato, che verrà ulteriormente "ampliato e migliorato" durante i test
Tale script deve essere utilizzato da situazioni diverse, Python e Javascript, non mi sembra così sbagliato "richiamarlo" dalle due fonti
Re-implementare tutto è parecchio gravoso, poi sicuramente dal lato prestazione sarà meglio sfruttando i vari linguaggi, però.....

pabloski
12-09-2017, 09:46
il perno era R perchè va bene per data mining e apprendimento automatico (tra le altre cose)


Data mining ok, anche se R non e' l'unica soluzione adatta.

Sul secondo punto sono dubbioso. Per apprendimento automatico intendi deep learning, reti neurali e compagnia? In quel caso piu' che R sono proprio gli algoritmi a fare la differenza. Ci sono vagonate di reti neurali implementate in Python, molte di piu' di quante ne siano state implementate in R.



Poter richiamare uno script R da Python e PHP è una buona cosa

In generale l'interoperabilita' tra sistemi diversi e' sempre una buona cosa. Ma esistono differenze strutturali che pongono limiti a quanto e come possono interagire.


Con Javascript l' unica via sembra Node.js. E' una buona strada?

Javascript fuori dal browser non ha altra possibilita' che appoggiarsi a Nodejs. Esistono in verita' motori javascript supportati da QT, Gnome e altri progetti. Il punto e' che puoi farci girare codice javascript ma alle condizioni dettate dalla particolare implementazione.

Nodejs e' semplicemente V8 ( il motore javascript di Google Chrome ) non castrato, cioe' capace di accedere ai file sul disco, usare socket, pipe, processi, interagire liberamente col sistema operativo.

Che c'entra con R? Semplicemente siccome R non ha un supporto significativo ai widget toolkit, cioe' non puoi crearci facilmente GUI serie, si usa Electron per la GUI ( cioe' Nodejs + Chromium + Javascript ) e tramite socket si inviano/ricevono dati e comandi ai programmi R. Ma e' una cosa che puoi benissimo fare senza Nodejs. Crei una GUI in Python e usi le socket per fare le stesse cose.

pabloski
12-09-2017, 09:53
però se c' è uno script di oltre 1000 righe già implementato, che verrà ulteriormente "ampliato e migliorato" durante i test

Questo e' uno dei casi in cui si puo' accettare l'onere di mischiare varie tecnologie.

Ma il punto e' sempre lo stesso, si parte dal progetto da implementare e si sceglie come implementarlo, mai viceversa.

Se sei all'inizio, allora e' bene scegliere un settore d'interesse, una specifica tecnologia di quel settore e studiarsela.

E ci sono linguaggi che pochi programmatori studiano che invece andrebbero studiati per gli orizzonti che aprono. Tipo Haskell e Lisp. Il primo perche' e' funzionale puro, il secondo perche' implementa paradigmi che ancora oggi molti linguaggi non posseggono.