
bene, buongiorno, quindi ho usato sono
spento e acceso per circa 15 anni ma
di solito come parte di un’altra parte del progetto
di un progetto scritto in altre lingue
e così la mia prospettiva su R è un po ‘
diverso da qualcuno che inizia e
termina la giornata semplicemente usando R di solito
più interessato a R è una parte di
qualcos’altro quindi parlerò di come
mescolare sono con altri linguaggi come chiamare
da fuori ad altre lingue o come
usare R da qualcos’altro quindi perché lo sono
bene il più grande vantaggio di R è il
le biblioteche ci sono tonnellate di davvero
librerie utili in R e per quello
la ragione che molte persone usano sono anche se
loro non vogliono davvero loro
non mi piace la lingua di per sé, ma loro
voglio usare la funzionalità del nostro e
Direi anche che R è di fatto
linguaggio standard per statistica
ricerca ma sarò un po ‘attento
quando dico questo quando intendo quello con quello
Intendo la ricerca sulle statistiche di per sé
se le persone usano le statistiche per farlo
ricerca in genetica o meteorologia o
qualcos’altro potrebbero non essere così probabili
usare R ma se vedi una carta in a
giornale statistico con un nuovo algoritmo
o nuovo metodo o qualcosa che sei molto
probabile vedere il codice scritto nel nostro Python
è un po ‘come recuperare il R o il passato
dipende dalla tua prospettiva per i dati
scienza, voglio dire, c’è una linea sfocata
tra scienza dei dati e statistica ma
persone che si definiscono statisti
sono più propensi a usare sono le persone che
chiamarsi scienziati dei dati o maggio
essere più propensi a usare Python fino a
i linguaggi statistici diventano R è molto
un buon linguaggio se stai arrivando
da parte di SAS R è un linguaggio fantastico
se vieni da qualcosa
come Java o Python o un’altra lingua
così si può essere un po ‘
deluso
come Dennis Ritchie ha detto di vederti
potrebbe dire la stessa cosa circa il nostro che
è bizzarro e imperfetto ed enorme
il successo va bene e allora perché dovresti
voglio mescolare le lingue in due diverse
casi d’uso uno sta scrivendo il nostro codice
ma tu vuoi migliorare l’efficienza
quindi l’arte può essere molto lenta specialmente per
cose come loops si occupa molto dei loop
lentamente e quindi potresti voler prendere
qualche hotspot nel tuo codice e riscriverlo
in C o qualcos’altro è più questo
performante anche con la memoria non lo è
gestire la memoria particolarmente bene e così
si può esaurire la memoria fare
qualcosa nel nostro dove lo stesso codice
riscritto in C o come C
il linguaggio potrebbe avere un sacco di memoria e
l’efficienza nella memoria sono
in realtà strettamente correlato a un compilatore
esperto col quale ero abituato a lavorare
i guardati al making sono di più
efficiente ha detto che il nostro passa la maggior parte di
il suo tempo di allocazione e deallocazione
oggetti così nella gestione della memoria
è profondo nel nostro dove è difficile
renderlo più efficiente quindi presumo
per questo parlare che se stai chiamando
dal nostro fuori a qualcos’altro che è
perché vuoi migliorare l’efficienza
e poi se stai chiamando nel nostro da
un’altra lingua è perché tu vuoi
la nostra funzionalità forse non lo sei
particolarmente preoccupato per l’efficienza
ma vuoi solo fare qualcosa
c’è un una nostra biblioteca per la destra tutta
giusto così passerò la maggior parte del discorso
parlare dei modi per interagire con
il primo solo per dire alcune cose
riguardo a noi stessi come ho detto che l’arte può
essere piuttosto lento e quindi potresti volerlo
ottimizzare il nostro e ora darti il mio
algoritmo personale per come ottimizzare
nostro
primo vectorize r è un vettore
lingua ogni volta che puoi operare
cose come vettori piuttosto che scrivere
codice esplicito per scorrere attraverso di loro e
se no, non usare R o almeno non per
quella parte del codice che puoi spesso ottenere
sostanziale accelerare mediante vettorizzazione
qualcosa se lo hai scritto in un modo simile
non sfrutta altri vettori
di quello che ci sono trucchi ad hoc che tu
può provare che potrebbero darti il 20 o il 30%
accelerare ma in quel modo ti guiderà
pazzo se vuoi un ordine di grandezza
accelerare non lo capirai
semplicemente riorganizzando il codice R se lo desideri
questo tipo di velocità fino probabilmente è necessario
per riscrivere tutto o riscrivere a
hotspot in qualche altra lingua e
supponendo che tu venga da
un’altra lingua che stai scrivendo Java
stai scrivendo c-sharp stai scrivendo
Python qualcosa del genere e tu solo
voglio usare un po ‘di R per alcuni
funzionalità di cui potresti essere sorpreso
la sintassi un po ‘su come usare R
così come ho detto prima il nostro è un vettore
linguaggio tutto è un vettore anche se
hai un solo numero che non hai
hai davvero numeri in R che hai
vettori di lunghezza 1 quindi non è davvero
fortemente tipizzato in tal senso e
tutto può essere nullo o n / a e come
tanto quanto ho provato, ancora non lo so
capire la differenza tra null
e na come uno di loro è un mancante
valore e l’ altro è un valore che è
non c’è, quindi è buono
spiegazione come posso trovare e e le persone
sono incoerenti nel modo in cui trattano
questo, ma la cosa da avvertire è
tutto è potenzialmente nulla quando tu
ottenere un modo da ricevere un po ‘di R vettore indietro
al tuo programma è apparentemente un vettore
di doppio ma non contano su di esso
quei doppi potrebbero essere un null o un na
come Fortran
vettori nel nostro indice da uno non da
zero, quindi è qualcosa a cui prestare attenzione
e il più bizzarro di tutti lo zero è legale
indice nel nostro non fa niente
o non è chiaro ciò che fa fare, ma
è legale non è non è come
calpestare la fine di un array C dove
è una memoria non inizializzata
perfettamente legale per accedere allo zeroth
elemento di un array e ti dà un
digita invece di un valore o qualcosa
così così e puoi anche avere
indici negativi in prima destra ma
non si comportano come ci si potrebbe aspettare
da dire Perl o Python dove dicono
quello negativo è l’ultimo elemento o a
il secondo negativo è il penultimo
elemento nel nostro funziona completamente
diverso se hai un array e tu
indice negativo due che rimuove il
secondo elemento della matrice o se si
avere organizzato da negativo a negativo 2
tre che rimuove il secondo e il terzo
elementi dell’array che possono sembrare
come una cosa strana da fare ma se tu
pensa a ciò che R è ed è progettato
essere un linguaggio interattivo
analisi statistica bene allora in quello
contesto ha senso che si potrebbe
vuoi rimuovere i valori che hai valori anomali
hai dei valori mancanti che vuoi
ignorare quindi è un’operazione comune a
voglio rimuovere le cose un’altra somiglianza
tra R e Fortran è quello per impostazione predefinita
le matrici sono riempite per colonna non per riga
così puoi avere il nostro prendere un vettore e
interpretalo come una matrice per riga ma tu
passare una discussione per farlo
che di default funziona solo sulle colonne
come Fortran e qualche strana sintassi lo sono
usato come un segno di dollaro come la maggior parte
le lingue userebbero un punto per indicare
gli elementi di un punto classe vengono utilizzati di più
come un trattino basso nei linguaggi basati su C
proprio come un separatore convenzionale ma
senza significato linguistico e il
sottolineatura usato per significare assegnarlo
non lo è più nel nostro io lo penso ancora
non s + ma lo era di solito se tu
aveva cibo barra di sottolineatura che sarebbe
assegna la barra del valore alla variabile foo
che potrebbe essere una sorpresa tutto
proprio così in due modi per interagire con
con il nostro si può sempre scrivere pacchetti
nel nostro che chiamano C o Fortran
questa è l’ interfaccia di livello più basso e
non proprio quello che è raccomandato
più ma se vuoi la V più
controllo possibile a cui scendere
il livello del mare e trattare direttamente con
interiora di sono quello che devi fare un sacco di
gestione della memoria di conteggio di riferimento
il casting sembra un po ‘come fare
programmazione vecchio stile e vedere ma
in questi giorni la maggior parte delle persone userebbe il nostro CPP
di cui parlerò tra un momento piuttosto
che scendere al livello del mare nostro
CPP offre un’interfaccia molto più bella
è il livello più alto che potrebbe essere
cosa sta cercando di fare e ancora
ti dà il pieno controllo ma ad un livello più alto
livello sintattico va bene così in questi giorni a
il nostro CPP è il modo più popolare per farlo
interagire tra R e un’altra lingua
con questo puoi chiamare C o C ++ o
Fortran di R e puoi usare anche
C ++ avanzato va bene usando STL
costruisce modelli c’è un ricco
interfaccia ma tra C ++ e R e se
vuoi andare nella direzione opposta
vuoi chiamare il nostro dal C ++ che puoi fare
anche questo fa ancora parte di questo nostro CPP
progetto ma tecnicamente passa da a
nome diverso o
includ in modo da dare un esempio questo
è solo un secondo
si può anche inline C ++ codice nel tuo R
quindi hai uno script R e poi
da qualche parte c’è un hotspot in cui sai
il cuore del tuo programma e
vuoi fare solo quelle poche righe
nella funzione AC puoi farlo ancora
stare in R e basta passare il C ++ o
Codice C o C ++ per il nostro CPP come te
potrebbe scrivere una sequenza di sequel e inviare
a un database all’interno di un diverso
lingua quindi il riferimento principale per il nostro
CPP è il sito del nostro CPP org il
progetto creato da Dirk Edel Gadol e
ha scritto un libro sul nostro CPP così tu
potrebbe trovare il suo libro da Springer se tu
volevo leggere di più in questo modo così
ecco un esempio se vuoi usare a
un po ‘di C dall’interno e dal nostro
programma questo è tutto il nostro codice che carichi
la nostra libreria CPP quindi chiama questo
funzione chiamata funzione CPP con a
stringa e poi la magia avviene all’interno
quella funzione che prende quella stringa
lo interpreta come codice C o C ++ compila
lo memorizza da qualche parte dove non è necessario
sapere dove e poi crea un wrapper
intorno a ciò in R quindi, dopo aver definito
questa funzione C ++ chiamata add che ho ora
una funzione R chiamata add, ma sta andando
da attuare in in C ++ in modo che sia che sia
davvero senza soluzione di continuità se si vuole farlo
in questo modo e per una piccola quantità di codice
questo è conveniente se ne hai uno più grande
quantità di codice che probabilmente vuoi
compilare una sorta di modulo che chiameremo
in quel modo o forse tu inline un piccolo
quantità di codice che chiama un più grande
quantità di C ++ da qualche parte fuori linea ora
se sei nel mondo Microsoft
stai scrivendo il codice dotnet
un modo che è stato intorno per un lungo
il tempo è questo oggetto chiamato RDECOM
crea un’interfaccia Decom intorno sei
puoi chiamarlo da dire visivo
di base o qualche guaio komlang lo passano a
stringa del nostro codice lo interpreterà
eseguirlo e ti invieremo i risultati indietro
L’ho usato in produzione è a
un po ‘di paura non c’è molta sicurezza
in giro perché puoi passarlo
codice arbitrario ma siamo solo in quarantena
quello sulla sua propria scatola e appena ha funzionato
ci sono un paio di modi nuovi per
interagire con i nostri nel mondo Microsoft
c’è il provider di tipo F sharp così
che è particolarmente conveniente se lo sei
se usi F sharp se non lo sei
usando F sharp così stai usando C sharp
puoi ancora usare il tipo F sharp
fornitore come intermediario hai così
hai incollato poca F in mezzo
la tua R e il tuo codice c-sharp e c’è
un altro progetto della nostra rete che ho usato Rd
comm Non ho usato il tipo F sharp
fornitore o la nostra rete ho sentito bene
cose sul provider di tipo F sharp
in particolare, ma non l’ho usato che
personalmente e un nuovo modo di interagire
con il nostro dal mondo Microsoft è
attraverso sequel query del server così
recentemente Microsoft ha acquisito una rivoluzione
analytics un’azienda che era
supporto commerciale per il nostro e
Microsoft è nel processo di
integrando i nostri in alcuni dei loro
prodotti in modo da poter fare cose come questa
ora puoi avere un po ‘di sequel code
dove effettivamente facciamo il nostro come parte di
la tua dichiarazione di sequel la tua inlining a
un po ‘del nostro codice nel mezzo di
a dire una procedura memorizzata ora questo è
un po ‘bizzarro se ci pensi
volendo collegare il nostro e Haskell se
ci pensi è difficile da pensare
due lingue che sono più diverse
Haskell dà molta importanza al forte
digitando la correttezza della digitazione statica senza alcun lato
effetti linguaggio funzionale e R è
tutto tranne che per cui R è progettato
uso interattivo e così è
interpretato il suo testo tipicamente o
Digitato in modo incongruente o parola non lo faccio
sai come lo chiameresti e R non lo è
particolarmente preoccupato per il codice
essere corretto in quanto quando c’è un
trade-off tra facilità d’uso e
correttezza R sta per essere ottimizzata
per facilità d’uso è progettato per
qualcuno che esplora interattivamente un dato
ambientato in quel contesto non sei così
preoccupato per errori di tipo come sai
Voglio la terza fila di questo
set di dati bene è quello che non sono
andando a confondere quello per una stringa o un
Immagine JPEG o qualsiasi altra cosa se non lo sei
preoccupato per la digitazione di dove si trova
come in Haskell, tu sei davvero bene
stato su un progetto dove volevamo
usare Haskell e R, che si sa ha preso
me un po ‘di ottenere la mia testa intorno a quel
in realtà ha molto senso perché
le lingue sono complementari quindi il
il progetto che stavamo usando per
l’interfaccia di queste due lingue era
Haskell R è stato appena chiamato H at
il tempo ora si chiama Haskell
dal ramoscello I / O e il motivo per cui eravamo
l’interesse per questo era duplice
volevamo essere in grado di chiamare alcuni nostri
librerie e implementato cose che noi
non ha avuto sul lato Haskell e anche
essere in grado di mescolare il nostro e
Haskell in alcune delle nostre analisi
in grado di chiamare da Haskell in R e
vice versa
e quindi voglio dire che questo è davvero un
progetto notevole per essere in grado di
sintetizzare due lingue che sono giuste
diametralmente opposto e ancora
c’è una profonda integrazione che puoi
non solo passare i dati tra R e Haskell
puoi passare funzioni come tu puoi
potrebbe scrivere una funzione nel passaggio Haskell
a r2
ottimizzarlo o integrato o qualcosa
così ottenere il risultato di nuovo in
Tipi di dati Haskell quindi c’è un profondo
integrazione lì ed è tutto fatto
attraverso questo quasi quotare puoi mettere
il tuo codice all’interno di questo quasi Haskell
citare c’è anche come parte della stessa cosa
progetto c’è un ripple che è un
variazione della gh ri cepple dove tu
puoi interagire con R e tu puoi
anche usare Haskell via Haskell sono in a
Quaderno di Giove di cui parlerò
in un momento
dal modo in cui lavoro con Haskell e sono
insieme tipo di migliorare il mio apprezzamento
per quello che R è è buono, intendo
filosoficamente sono più inclinato verso
la scuola Haskell delle cose che conosci
come il controllo di tipo statico come il
compilatore che mi aiuta a verificare il mio codice
è corretto ecc. eppure ce ne sono alcuni
cose che erano semplicemente dolorose da fare
Haskell che siamo facili da fare in R così
quando fai analisi esplorativa
che è ciò che R fa bene a dirti
non mi importa dei tipi di gating giusto io
voglio solo vedere se c’è qualcosa
c’è prima se c’è qualcosa lì
sì, allora possiamo tornare indietro e aggiungere tutto il
tipi e test unitari e simili
ma prima voglio solo sapere cosa è
lì e anche io non voglio dover
cambia il tipo di tutte le mie funzioni
perché voglio inserire una stampa
dichiarazione così per quel tipo di
le cose di lavoro esplorativo erano molto di più
conveniente in R ma poi una volta le cose
sono stati sviluppati e tu vuoi avere il
la certezza che tutto sia
tipizzato staticamente e nessun effetto collaterale
così allora è bello tornare su
al lato Haskell ora se lo sei
familiarità con emacs org-mode
org-mode ti dà un modo di incollare
diverse lingue insieme compreso R
ma anche molte altre lingue e
come tutte le cose che Emacs è, è una specie di
crufty è tutto un po ‘strano se
sei la prima volta che lo vedi ma
è anche molto potente di nuovo come un sacco
di cose in Emacs quindi ha supporto
per molte lingue diverse puoi farlo tu
può
usa la modalità org per chiamare un po ‘di
Haskell un po ‘di C o Bosch o
qualunque cosa tu possa mescolare molte cose
insieme
in questo tipo di markup per org-mode e
funziona in modo affidabile multipiattaforma
di cose in questo discorso funzionano ma non possono
lavorare al primo tentativo richiede alcuni
tweaking e hai appena installato le cose
proprio così, ma la mia esperienza con
emacs org-mode è che funziona come
documentato ovunque al primo tentativo
adesso
potrebbe non funzionare come previsto ma lo fa
lavoro come documentato e va bene
documentato quindi è molto buono per
esplorando si sa se dici va bene io sono
lavorando qui sto tenendo appunti
quello che sto facendo chiama alcune chiamate in codice
questo codice in Perl chiama questo codice
qui e vedi tutto quello che ho bisogno di chiamare un po ‘
un po ‘del nostro forse per tracciare qualcosa o
qualunque cosa tu possa inserire in
piccolo codice nel nostro pure e questo
organoide è anche molto buono per i letterati
programmare quindi l’idea di alfabetizzare
la programmazione è ciò che pensi
la tua documentazione come primaria nella tua
il codice è secondario quindi anziché scrivere
il tuo codice e poi scrivi un po ‘
di documentazione sul lato che scrivi
documentazione un codice inline come
necessario in modo che tu possa pensarlo come
commento preso ad un estremo ma è
davvero più di quello che puoi
riorganizzare le cose nel modo in cui è
meglio per un lettore umano piuttosto che
cosa è meglio per un compilatore, così potresti
definire parte di una funzione qui e
spiegalo e poi potresti definire
un’altra parte di una funzione più tardi e
quindi chiedi all’ambiente di fare il pezzo
queste cose in una cosa coerente che
il compilatore può capire e ho giocato
con questo per un po ‘e sai che è
divertente da giocare con oh guarda sto chiamando
queste lingue diverse e poi tu
lo so ed è solo una specie di
giocattolo interessante ma di recente ho fatto un
progetto in cui questo ha davvero salvato il mio bacon
era un era un progetto in cui il
richiedere
i mesi erano molto complicati nel codice
non era così complicato ma giusto
capire cosa doveva essere fatto era
molto era dove sei più probabile
commettere un errore quando stai tirando
cose da fonti oscure e dicendo io
pensa che questo significhi che non è interamente
chiaro ma questo è il motivo per cui penso questo a
documenta tutto ciò che è stato scritto
la programmazione in org-mode è stata davvero una
ottimo modo per andare così ho detto che
org-mode supporta molte lingue
c’è un po ‘di confusione tra
org-mode e org Babel sono un po ‘ il
i termini sono usati in modo intercambiabile
tecnicamente org Babel è la biblioteca
che org-mode sta usando per fare tutto questo
gestione del codice ma c’erano circa 40
lingue l’org Babel org-mode
supporta fuori dalla scatola e poi c’è
molti altri che hanno
supporto di terze parti ma non sono come
ufficiali come quelli che spediscono con
Emacs quindi un file di org mug è una forma di
markup è possibile combinare il markup del testo in lattice
inserendo immagini inserendo link e così via
una sorta di HTML simile ma è più semplice
e puoi anche inserire il codice dove tu
avere una fonte iniziale nel tag sorgente e in
l’inizio o la stagg l’hai detto cosa
lingua che stai usando e poi semplicemente
inserisci quel codice e abbiamo pre-editing
questo dentro Emacs se sei dentro a
blocco di sai che puoi avere il
editor inserisci la tua modalità di modifica così
hai la colorazione della sintassi e così via
avanti per R e poi quando sei in a
sezione di una lingua diversa da
Emacs può modificarlo come quella lingua
anche se è tutto in un file così
ecco un esempio in questo unico mix
insieme il nostro pitone e perla così io
chiamare una funzione seno ho una funzione
scritto in R che restituisce solo il seno
e l’ho chiamato segno underscore R solo
per sottolineare che è scritto nel nostro
non è necessario puoi chiamarlo
qualunque cosa tu voglia ho appena aggiunto il
suffisso per chiarire dove sono le cose
venendo e hai quando lo fai
questo devi passare di default
argomenti così ho appena detto X default
zero quindi dalla mia funzione di cosign che sono
implementarlo in Python e semplicemente
quindi posso sapere che il mio codice funziona se io
e non solo per impostazione predefinita ho impostato il
variabile di default a uno in modo che se
le cose non vengono inizializzate il mio codice
sarà sbagliato quindi se notate nel
blocco sorgente per R il nome del nostro
il linguaggio è con la R maiuscola e il
blocco sorgente per Python il nome di
Python è con la P in lettere minuscole
le lingue in org-mode usano il programma
nome della lingua e in minuscolo qualche motivo
sono non fa in modo che sia la R maiuscola ok
poi si spostano verso la seconda colonna
Prenderò il quadrato dei miei due
valori perché sono sine quadrato più
coseno quadrato deve essere uguale quella giusta così
Lo farò solo in Perl
un’altra lingua e poi la mia chiamata
dichiarazione la sterlina più chiama tutto
in organoidi inizia con sterlina più giusto
perché è qualcosa di improbabile
digitare per errore in altro codice così
in questo caso ora nella chiamata
Sto chiamando la funzione Python che è
quindi chiamando R e Python o così
sembra
quello che sta letteralmente succedendo qui è quello
tutto sta passando per Emacs Lisp
quindi questa è davvero una specie di a
architettura hub-and-spoke in cui le cose
stanno entrando e uscendo da Emacs Lisp così
il Perl non sta letteralmente chiamando R ma
sembra che sia mediato
attraverso Emacs Lisp sotto il cofano e
quindi quando valuti un blocco di codice in
org-mode ti stamperà i risultati così
questo caso, i risultati sono solo un numero
il risultato potrebbe essere un’immagine così se tu
quindi stai facendo qualcosa in qualche altro
lingua, ma si desidera utilizzare la nostra per
tracciare è possibile utilizzare il nostro per inserire un
immagine per una trama va bene un altro modo di
le lingue di interoperabilità erano Giove
quaderni Jupiter ha iniziato come un
Python ma poi hanno cambiato il nome in
de-enfatizza Python quando c’è supporto
per altre lingue quindi il nome
Giove proveniva dalla programmazione Julia
linguaggio Python e R so Jupiter
i taccuini sono molto belli basati su HTML
interfaccia per notebook diversa
le lingue supportano molte differenze
lingue separatamente quindi non è davvero
così tanto una storia di interruzione come a
modo coerente per implementare i notebook in
lingue diverse in modo da poter avere un
Il taccuino Haskell Jupiter che sta usando
Codice Haskell e il nostro taccuino Jupiter
sta usando il nostro e sono coerenti
ma in realtà non stanno condividendo il codice
così tanto rispetto a qualcosa di simile
la modalità org di cui abbiamo parlato
I quaderni di Giove sono meno trasparenti
nel bene e nel male, meglio perché
hai più di un ambiente WYSIWYG
sai che sei un po ‘come a
repple web-based così tu sei
interagendo con qualcosa che trama
qualcosa che trama appare proprio lì
subito dopo dove lo tramate non lo fate
vedere quanti dettagli è bello se
stai esplorando qualcosa naturalmente
l’inconveniente è che c’è di più
andare sotto il cappuccio è più difficile
DIF i file non sono semplici
file di testo si potrebbe dire okay cosa
cambiato tra queste versioni perché
sotto il cofano è un quaderno di Giove
json è una specie di semi-leggibile
e quindi è più difficile da DIF di qualcosa
è più esplicito come in org-mode
quindi alcune delle lingue che sono
supportato da Jupiter Kernels list is
crescendo ogni giorno potrebbe esserci un
nuovo dal momento che ho fatto questa diapositiva è
davvero bello quindi hai una nuova lingua
e si desidera avere questa bella
supporto per notebook per questo è possibile
sulle spalle su quello che hanno già fatto
con Giove un altro fork dell’ipython
il notebook è qualcosa chiamato beaker e
questo dà più di una lingua
Interop story di allora fa Jupiter
puoi mescolare puoi mescolare diversi
lingue e passare i dati tra di loro
attraverso questo questo oggetto beaker globale
Ne farò un esempio in un secondo
e una delle belle caratteristiche di questo
quando se hai a che fare con alcuni dati
è possibile passare i frame di dati
tra le lingue così per molto tempo uno
dei vantaggi del nostro era quello che aveva
questo questo quadro di dati è simile a a
tabella sequel ma le colonne possono essere
diversi tipi e questo ha fatto molto
delle operazioni di analisi dei dati più
conveniente e per molto tempo la storia
era sì, preferirei scrivere Python ma tu
so che R ha questo data frame Python
non ha qualcosa del genere quindi sono
continuerò a usare R e poi West
McCanney ha scritto ai panda questa libreria
che ha tra le altre cose un analogo
ai nostri dati così che cosa fa il becher
si tradurrà tra questi due
tipi di frame dei dati che è davvero
C’è un sacco di cose non v’è
più che semplicemente come sai convertire
una stringa in questa lingua a una stringa in
quella lingua c’è è di più
complicato ma è anche molto
comodo per andare tra quelli che c’è
anche la piuma proietta la piuma di Apache
che fa lo stesso tipo di cosa che
ha un modo di andare tra i nostri
quaderno i nostri dati frame e dati python
telai Torneremo a quella in solo un
minuto quindi ecco un esempio di come tu
sarebbe mescolare lingue
usando il becher in modo diverso
celle nel tuo taccuino conosci Python
cellulare solo se vuoi creare un
variabile foo sull’oggetto beaker globale
hai detto che il becher punto foo al suo interno è uguale
a qualunque cosa si tratti potrebbe essere una stringa a
numero un vettore qualunque se poi lo sei
chiamandolo da un’altra lingua
usa la stessa convenzione di punti che potevi
chiamalo puoi recuperare il valore
allo stesso modo in cui l’hai detto così se lo fossi stato
stai chiamando da Java potresti semplicemente
Potresti avere un punto di coppa piumato su on
il lato destro di un’equazione R è a
Poco diverso quindi devi usare questo
i due punti del colon del becher ottengono la funzione a
estrae le cose dall’oggetto globale e
impostato per rimetterli in questo caso
così ho ciao mondo in cui lo appiccico
l’oggetto beaker globale in Python quindi
nel nostro io lo tiro fuori fare qualcosa con
dice che voglio creare un nuovo
Risposta variabile globale Posso impostarlo in R
e poi rileggilo di nuovo in Python
una cosa strana lì in fondo e
Non dico risposta punto beaker dico
Becher che risponde alla parentesi 0 perché
non ci sono numeri nel nostro c’è solo
vettori così quando imposto questa cosa è uguale
a 42 in realtà l’ho impostato su un vettore di
lunghezza uno contenente 42 ecco perché io
devo leggerlo come un vettore anche
anche se l’ho messo come uno scalare tutto bene
quindi alcune delle diverse lingue
supportato da becher per i nostri scopi ha
la nostra che è quello di cui stiamo parlando
oggi e ne ha parecchi altri
cose piacevoli che considera casualmente
Python 2 e Python 3 devono essere separati
lingue così bene e poi il
il modo finale di miscelazione è con gli altri
lingue che ho voluto parlare di
era il nostro segnato giù così questo è più dentro
lo spirito del markup di org-mode simile a
Giove o
taccuini per i bicchieri, ma è di più
basato sul testo quindi se hai a che fare con
Giove sai che stai lavorando
in un browser e ci sono cose
che sono nascosti da te se stai usando
il nostro markdown stai lavorando in un testo
editor fino a quando non si desidera esportarlo
stai lavorando nel tuo file di testo e dici
okay mi piacerebbe vedere questo h2 come HTML tu
esportalo in questo modo ma non lo sei
lavorando in un browser di per sé e simili
con con beaker puoi scambiare dati
tra R e altre lingue tramite dati
cornici e perché questo è pensato per
questo tipo di calcolo basato su documenti
ci sono molti modi diversi per te
può esportare il nostro markdown diverso
i diari hanno guide di stile per te
diciamo che qui c’è un nostro file di markdown
vuoi esportare come articolo di giornale per
questo diario puoi fare che esporti
Mi piace esportare in HTML e diversi
variazioni su quello così alcuni del marchio
lingue supportate dal nostro markdown
quello non può essere familiare è la bancarella
l’ultimo della lista è una lingua
per fare l’analisi bayesiana della catena Markov
Monte Carlo e così via che è
qualcosa che è popolare nel nostro modo
ecco un esempio di come useresti il nostro
markdown per usare una lingua che hai appena
tre zecche posteriori e poi dargli il
nome della lingua in parentesi graffe e poi
scrivi il tuo codice e poi tre
backtick due per terminarlo così dentro il
il nostro blocco che sto scrivendo sono dentro
il blocco Python sto scrivendo Python e
puoi scambiare dati avanti e indietro
tra le lingue non funziona più lontano
come so ma puoi scambiare dati
tra i tuoi blocchi usando i dati
cornici e basta tornare indietro di un secondo
le lingue supportate dal nostro
giù è il nostro CPP quindi se hai il nostro codice
nel tuo file markdown e vuoi
per ottimizzarne un po ‘è possibile creare
un altro blocco del nostro codice CPP e chiamata
quel codice dal tuo codice R
va bene quindi in sintesi perché lo faresti
voglio mescolare R in altre lingue
tipicamente vuoi chiamare dal nostro
per l’efficienza in cui si desidera chiamare
in R per afferrare alcune funzionalità che R ha
un numero di differenze se sei se
stai volendo usare sono proprio come te
il tuo programma Java che vuoi
Radar per alcune cose carine che succederà
fai per te alcune cose a cui prestare attenzione
ci sono alcuni capricci che conosci una serie di
i numeri potrebbero non tutti contenere
numeri ecc e una cosa sulla maggior parte di
questi approcci non sono quasi nessuno di loro
ha funzionato al primo tentativo che è giusto
la natura della bestia alcuni di questi
le cose sono un po ‘delicate e come te
installarli promuovere per la maggior parte di questi
Ho avuto problemi in cui LK lavora su questo
il computer non funziona su questo computer
perché forse il nostro in un po ‘diverso
posizione e devo dire dove R
è o o la fase della luna
diverso o qualsiasi cosa così dirò la
questi metodi sono un po ‘pignoli
e un po ‘difficile da impostare noi
parlato di lavoro Babele e se ha detto sì
org Babel è l’unica cosa che ha funzionato
molto bene su ogni piattaforma che ho provato
su tutti i computer ho provato su di esso
ha funzionato come documentato ma poi di nuovo
forse non come previsto, ma se tu se tu
leggi la documentazione che funziona
come documentato e in generale il più
maturo il modo più potente per connettersi
tra R e qualcos’altro è finito
il nostro CPP quindi se non hai un progetto
non scritto in C ++ puoi usare uno straniero
divertimento
un’interfaccia per passare attraverso il nostro CPP a
il nostro che è probabilmente il migliore
approccio generale, quindi se vuoi dettagliato
controllare esattamente cosa sta succedendo e
fuori dal nostro CPP è la strada da percorrere se
non ne hai bisogno allora in alcuni
lingue hai un livello superiore
interfaccia per passare attraverso le cose
va bene quindi assicurati di scrivere la sessione
e se vuoi, se ne hai
domande Io prenderò domande giuste
ora ma se pensi a una domanda in a
pochi giorni che vorreste per voi mi chiedono
potrebbe mandarmi una e -mail o potresti controllare il mio
sito web o qualunque sia il mio contatto
informazioni e grazie mille va bene così
con quale lingua preferisci usare
il nostro e per quello che è il più delle volte
utilizzare Python perché ha quello che mi serve che
significa che il nostro è un linguaggio statistico
è fantastico se stai facendo statistiche se
stai facendo una programmazione più generale
devi fare un file munging te
necessario creare un servizio web che devi
fai questo o quello conosci questo tipo di
cose forse potrebbe essere fatto in ARB è
tipo di imbarazzante la cosa che mi piace
Python non è un brutto linguaggio per
tutto ciò che voglio fare forse non è il
meglio, ma va bene così posso restare
una lingua più lunga se lo faccio se se
il Python è abbastanza efficiente se lo è
non pescando abbastanza, di solito scrivo C ++ I
non in generale non cerco di fare
Python più veloce non provo a farlo sono
più veloce se non è abbastanza veloce
Mi limito e scrivo C ++ perché
allora so che sarà più veloce mentre
se si prova a non creare un linguaggio di scripting
più veloce vai a monte, lo sai
stai andando contro il grano potrebbe
lavoro ma potresti spendere un paio di
giorni a cercare le cose e da nessuna parte io
preferisco non farlo
quindi quella era una domanda attraverso l’app
altre domande vivono molto bene
domanda quindi come funziona a
produzione contro esplorazione si ho
usato hanno usato questo in produzione con a
un po ‘ di paura e in alcuni casi e
non altri così con Haskell R che abbiamo fatto
uso quello in produzione, credo
questo è sicuro per le persone che
lo stanno sviluppando conoscendo il look
le stranezze della nostra allocazione di memoria e
gestire le eccezioni se qualcosa va
ho sbagliato hanno fatto un molto professionale
lavoro di integrazione di questi due e là
potrebbe usare sono in produzione senza
esitazione se hai qualche codice R quello
qualcuno ti ha dato così bene qui che ho
scritto questo codice R tutto ciò che devi fare
è mettere un interfaccia web su di esso I
avremmo paura di questo, non importa come
beh, non importa quale strumento stai usando
perché le persone che stanno scrivendo sono per
il loro uso non pensa a come
le cose funzioneranno su un server
sono dichiarazioni di stampa che potrebbero esserci
qualcosa in cui si aspettano
qualcuno eo qualcosa o qualunque cosa
non è solo non pronto per una produzione
ambiente ho usato la cosa di Rd
di nuovo in produzione con un po ‘ di
paura e tremore ma abbiamo creato
messo in quarantena sul proprio server e utilizzare
quello in produzione la maggior parte di questi altri
le cose sarebbero più per interattivo
esplorazione come immagino che qualcuno potrebbe
usa Emacs in produzione per includere
cose insieme che sarebbero una specie di
strano ma forse potrei farlo sì
signore okay sì sì gli strumenti per le domande
traduci in JavaScript così potresti farlo
eseguilo in un browser che non conosco
ma il nostro studio ha un progetto chiamato
lucente che ti permetterà di sviluppare
pagina web interattiva
usando il nostro sì dal modo in cui ho un ho avuto
una citazione di Hadley Wickham che intendevo fare
dì di più su Hadley, lui è ora al nostro
studio se hai intenzione di usare il nostro
guarda seriamente Hadley Wickham e il suo
sito Web e tutti i suoi strumenti che è
scritto un codice fantastico che questo
ti protegge da alcune delle stranezze
del nostro è che ha scritto molto di veramente
strumenti utili che ti permettono di lavorare
a un livello più alto
altre domande va bene se tu
pensa a qualcosa dopo mi spara e
e-mail
Sarò felice di rispondere più tardi se io se
Posso tutto bene grazie
spento e acceso per circa 15 anni ma
di solito come parte di un’altra parte del progetto
di un progetto scritto in altre lingue
e così la mia prospettiva su R è un po ‘
diverso da qualcuno che inizia e
termina la giornata semplicemente usando R di solito
più interessato a R è una parte di
qualcos’altro quindi parlerò di come
mescolare sono con altri linguaggi come chiamare
da fuori ad altre lingue o come
usare R da qualcos’altro quindi perché lo sono
bene il più grande vantaggio di R è il
le biblioteche ci sono tonnellate di davvero
librerie utili in R e per quello
la ragione che molte persone usano sono anche se
loro non vogliono davvero loro
non mi piace la lingua di per sé, ma loro
voglio usare la funzionalità del nostro e
Direi anche che R è di fatto
linguaggio standard per statistica
ricerca ma sarò un po ‘attento
quando dico questo quando intendo quello con quello
Intendo la ricerca sulle statistiche di per sé
se le persone usano le statistiche per farlo
ricerca in genetica o meteorologia o
qualcos’altro potrebbero non essere così probabili
usare R ma se vedi una carta in a
giornale statistico con un nuovo algoritmo
o nuovo metodo o qualcosa che sei molto
probabile vedere il codice scritto nel nostro Python
è un po ‘come recuperare il R o il passato
dipende dalla tua prospettiva per i dati
scienza, voglio dire, c’è una linea sfocata
tra scienza dei dati e statistica ma
persone che si definiscono statisti
sono più propensi a usare sono le persone che
chiamarsi scienziati dei dati o maggio
essere più propensi a usare Python fino a
i linguaggi statistici diventano R è molto
un buon linguaggio se stai arrivando
da parte di SAS R è un linguaggio fantastico
se vieni da qualcosa
come Java o Python o un’altra lingua
così si può essere un po ‘
deluso
come Dennis Ritchie ha detto di vederti
potrebbe dire la stessa cosa circa il nostro che
è bizzarro e imperfetto ed enorme
il successo va bene e allora perché dovresti
voglio mescolare le lingue in due diverse
casi d’uso uno sta scrivendo il nostro codice
ma tu vuoi migliorare l’efficienza
quindi l’arte può essere molto lenta specialmente per
cose come loops si occupa molto dei loop
lentamente e quindi potresti voler prendere
qualche hotspot nel tuo codice e riscriverlo
in C o qualcos’altro è più questo
performante anche con la memoria non lo è
gestire la memoria particolarmente bene e così
si può esaurire la memoria fare
qualcosa nel nostro dove lo stesso codice
riscritto in C o come C
il linguaggio potrebbe avere un sacco di memoria e
l’efficienza nella memoria sono
in realtà strettamente correlato a un compilatore
esperto col quale ero abituato a lavorare
i guardati al making sono di più
efficiente ha detto che il nostro passa la maggior parte di
il suo tempo di allocazione e deallocazione
oggetti così nella gestione della memoria
è profondo nel nostro dove è difficile
renderlo più efficiente quindi presumo
per questo parlare che se stai chiamando
dal nostro fuori a qualcos’altro che è
perché vuoi migliorare l’efficienza
e poi se stai chiamando nel nostro da
un’altra lingua è perché tu vuoi
la nostra funzionalità forse non lo sei
particolarmente preoccupato per l’efficienza
ma vuoi solo fare qualcosa
c’è un una nostra biblioteca per la destra tutta
giusto così passerò la maggior parte del discorso
parlare dei modi per interagire con
il primo solo per dire alcune cose
riguardo a noi stessi come ho detto che l’arte può
essere piuttosto lento e quindi potresti volerlo
ottimizzare il nostro e ora darti il mio
algoritmo personale per come ottimizzare
nostro
primo vectorize r è un vettore
lingua ogni volta che puoi operare
cose come vettori piuttosto che scrivere
codice esplicito per scorrere attraverso di loro e
se no, non usare R o almeno non per
quella parte del codice che puoi spesso ottenere
sostanziale accelerare mediante vettorizzazione
qualcosa se lo hai scritto in un modo simile
non sfrutta altri vettori
di quello che ci sono trucchi ad hoc che tu
può provare che potrebbero darti il 20 o il 30%
accelerare ma in quel modo ti guiderà
pazzo se vuoi un ordine di grandezza
accelerare non lo capirai
semplicemente riorganizzando il codice R se lo desideri
questo tipo di velocità fino probabilmente è necessario
per riscrivere tutto o riscrivere a
hotspot in qualche altra lingua e
supponendo che tu venga da
un’altra lingua che stai scrivendo Java
stai scrivendo c-sharp stai scrivendo
Python qualcosa del genere e tu solo
voglio usare un po ‘di R per alcuni
funzionalità di cui potresti essere sorpreso
la sintassi un po ‘su come usare R
così come ho detto prima il nostro è un vettore
linguaggio tutto è un vettore anche se
hai un solo numero che non hai
hai davvero numeri in R che hai
vettori di lunghezza 1 quindi non è davvero
fortemente tipizzato in tal senso e
tutto può essere nullo o n / a e come
tanto quanto ho provato, ancora non lo so
capire la differenza tra null
e na come uno di loro è un mancante
valore e l’ altro è un valore che è
non c’è, quindi è buono
spiegazione come posso trovare e e le persone
sono incoerenti nel modo in cui trattano
questo, ma la cosa da avvertire è
tutto è potenzialmente nulla quando tu
ottenere un modo da ricevere un po ‘di R vettore indietro
al tuo programma è apparentemente un vettore
di doppio ma non contano su di esso
quei doppi potrebbero essere un null o un na
come Fortran
vettori nel nostro indice da uno non da
zero, quindi è qualcosa a cui prestare attenzione
e il più bizzarro di tutti lo zero è legale
indice nel nostro non fa niente
o non è chiaro ciò che fa fare, ma
è legale non è non è come
calpestare la fine di un array C dove
è una memoria non inizializzata
perfettamente legale per accedere allo zeroth
elemento di un array e ti dà un
digita invece di un valore o qualcosa
così così e puoi anche avere
indici negativi in prima destra ma
non si comportano come ci si potrebbe aspettare
da dire Perl o Python dove dicono
quello negativo è l’ultimo elemento o a
il secondo negativo è il penultimo
elemento nel nostro funziona completamente
diverso se hai un array e tu
indice negativo due che rimuove il
secondo elemento della matrice o se si
avere organizzato da negativo a negativo 2
tre che rimuove il secondo e il terzo
elementi dell’array che possono sembrare
come una cosa strana da fare ma se tu
pensa a ciò che R è ed è progettato
essere un linguaggio interattivo
analisi statistica bene allora in quello
contesto ha senso che si potrebbe
vuoi rimuovere i valori che hai valori anomali
hai dei valori mancanti che vuoi
ignorare quindi è un’operazione comune a
voglio rimuovere le cose un’altra somiglianza
tra R e Fortran è quello per impostazione predefinita
le matrici sono riempite per colonna non per riga
così puoi avere il nostro prendere un vettore e
interpretalo come una matrice per riga ma tu
passare una discussione per farlo
che di default funziona solo sulle colonne
come Fortran e qualche strana sintassi lo sono
usato come un segno di dollaro come la maggior parte
le lingue userebbero un punto per indicare
gli elementi di un punto classe vengono utilizzati di più
come un trattino basso nei linguaggi basati su C
proprio come un separatore convenzionale ma
senza significato linguistico e il
sottolineatura usato per significare assegnarlo
non lo è più nel nostro io lo penso ancora
non s + ma lo era di solito se tu
aveva cibo barra di sottolineatura che sarebbe
assegna la barra del valore alla variabile foo
che potrebbe essere una sorpresa tutto
proprio così in due modi per interagire con
con il nostro si può sempre scrivere pacchetti
nel nostro che chiamano C o Fortran
questa è l’ interfaccia di livello più basso e
non proprio quello che è raccomandato
più ma se vuoi la V più
controllo possibile a cui scendere
il livello del mare e trattare direttamente con
interiora di sono quello che devi fare un sacco di
gestione della memoria di conteggio di riferimento
il casting sembra un po ‘come fare
programmazione vecchio stile e vedere ma
in questi giorni la maggior parte delle persone userebbe il nostro CPP
di cui parlerò tra un momento piuttosto
che scendere al livello del mare nostro
CPP offre un’interfaccia molto più bella
è il livello più alto che potrebbe essere
cosa sta cercando di fare e ancora
ti dà il pieno controllo ma ad un livello più alto
livello sintattico va bene così in questi giorni a
il nostro CPP è il modo più popolare per farlo
interagire tra R e un’altra lingua
con questo puoi chiamare C o C ++ o
Fortran di R e puoi usare anche
C ++ avanzato va bene usando STL
costruisce modelli c’è un ricco
interfaccia ma tra C ++ e R e se
vuoi andare nella direzione opposta
vuoi chiamare il nostro dal C ++ che puoi fare
anche questo fa ancora parte di questo nostro CPP
progetto ma tecnicamente passa da a
nome diverso o
includ in modo da dare un esempio questo
è solo un secondo
si può anche inline C ++ codice nel tuo R
quindi hai uno script R e poi
da qualche parte c’è un hotspot in cui sai
il cuore del tuo programma e
vuoi fare solo quelle poche righe
nella funzione AC puoi farlo ancora
stare in R e basta passare il C ++ o
Codice C o C ++ per il nostro CPP come te
potrebbe scrivere una sequenza di sequel e inviare
a un database all’interno di un diverso
lingua quindi il riferimento principale per il nostro
CPP è il sito del nostro CPP org il
progetto creato da Dirk Edel Gadol e
ha scritto un libro sul nostro CPP così tu
potrebbe trovare il suo libro da Springer se tu
volevo leggere di più in questo modo così
ecco un esempio se vuoi usare a
un po ‘di C dall’interno e dal nostro
programma questo è tutto il nostro codice che carichi
la nostra libreria CPP quindi chiama questo
funzione chiamata funzione CPP con a
stringa e poi la magia avviene all’interno
quella funzione che prende quella stringa
lo interpreta come codice C o C ++ compila
lo memorizza da qualche parte dove non è necessario
sapere dove e poi crea un wrapper
intorno a ciò in R quindi, dopo aver definito
questa funzione C ++ chiamata add che ho ora
una funzione R chiamata add, ma sta andando
da attuare in in C ++ in modo che sia che sia
davvero senza soluzione di continuità se si vuole farlo
in questo modo e per una piccola quantità di codice
questo è conveniente se ne hai uno più grande
quantità di codice che probabilmente vuoi
compilare una sorta di modulo che chiameremo
in quel modo o forse tu inline un piccolo
quantità di codice che chiama un più grande
quantità di C ++ da qualche parte fuori linea ora
se sei nel mondo Microsoft
stai scrivendo il codice dotnet
un modo che è stato intorno per un lungo
il tempo è questo oggetto chiamato RDECOM
crea un’interfaccia Decom intorno sei
puoi chiamarlo da dire visivo
di base o qualche guaio komlang lo passano a
stringa del nostro codice lo interpreterà
eseguirlo e ti invieremo i risultati indietro
L’ho usato in produzione è a
un po ‘di paura non c’è molta sicurezza
in giro perché puoi passarlo
codice arbitrario ma siamo solo in quarantena
quello sulla sua propria scatola e appena ha funzionato
ci sono un paio di modi nuovi per
interagire con i nostri nel mondo Microsoft
c’è il provider di tipo F sharp così
che è particolarmente conveniente se lo sei
se usi F sharp se non lo sei
usando F sharp così stai usando C sharp
puoi ancora usare il tipo F sharp
fornitore come intermediario hai così
hai incollato poca F in mezzo
la tua R e il tuo codice c-sharp e c’è
un altro progetto della nostra rete che ho usato Rd
comm Non ho usato il tipo F sharp
fornitore o la nostra rete ho sentito bene
cose sul provider di tipo F sharp
in particolare, ma non l’ho usato che
personalmente e un nuovo modo di interagire
con il nostro dal mondo Microsoft è
attraverso sequel query del server così
recentemente Microsoft ha acquisito una rivoluzione
analytics un’azienda che era
supporto commerciale per il nostro e
Microsoft è nel processo di
integrando i nostri in alcuni dei loro
prodotti in modo da poter fare cose come questa
ora puoi avere un po ‘di sequel code
dove effettivamente facciamo il nostro come parte di
la tua dichiarazione di sequel la tua inlining a
un po ‘del nostro codice nel mezzo di
a dire una procedura memorizzata ora questo è
un po ‘bizzarro se ci pensi
volendo collegare il nostro e Haskell se
ci pensi è difficile da pensare
due lingue che sono più diverse
Haskell dà molta importanza al forte
digitando la correttezza della digitazione statica senza alcun lato
effetti linguaggio funzionale e R è
tutto tranne che per cui R è progettato
uso interattivo e così è
interpretato il suo testo tipicamente o
Digitato in modo incongruente o parola non lo faccio
sai come lo chiameresti e R non lo è
particolarmente preoccupato per il codice
essere corretto in quanto quando c’è un
trade-off tra facilità d’uso e
correttezza R sta per essere ottimizzata
per facilità d’uso è progettato per
qualcuno che esplora interattivamente un dato
ambientato in quel contesto non sei così
preoccupato per errori di tipo come sai
Voglio la terza fila di questo
set di dati bene è quello che non sono
andando a confondere quello per una stringa o un
Immagine JPEG o qualsiasi altra cosa se non lo sei
preoccupato per la digitazione di dove si trova
come in Haskell, tu sei davvero bene
stato su un progetto dove volevamo
usare Haskell e R, che si sa ha preso
me un po ‘di ottenere la mia testa intorno a quel
in realtà ha molto senso perché
le lingue sono complementari quindi il
il progetto che stavamo usando per
l’interfaccia di queste due lingue era
Haskell R è stato appena chiamato H at
il tempo ora si chiama Haskell
dal ramoscello I / O e il motivo per cui eravamo
l’interesse per questo era duplice
volevamo essere in grado di chiamare alcuni nostri
librerie e implementato cose che noi
non ha avuto sul lato Haskell e anche
essere in grado di mescolare il nostro e
Haskell in alcune delle nostre analisi
in grado di chiamare da Haskell in R e
vice versa
e quindi voglio dire che questo è davvero un
progetto notevole per essere in grado di
sintetizzare due lingue che sono giuste
diametralmente opposto e ancora
c’è una profonda integrazione che puoi
non solo passare i dati tra R e Haskell
puoi passare funzioni come tu puoi
potrebbe scrivere una funzione nel passaggio Haskell
a r2
ottimizzarlo o integrato o qualcosa
così ottenere il risultato di nuovo in
Tipi di dati Haskell quindi c’è un profondo
integrazione lì ed è tutto fatto
attraverso questo quasi quotare puoi mettere
il tuo codice all’interno di questo quasi Haskell
citare c’è anche come parte della stessa cosa
progetto c’è un ripple che è un
variazione della gh ri cepple dove tu
puoi interagire con R e tu puoi
anche usare Haskell via Haskell sono in a
Quaderno di Giove di cui parlerò
in un momento
dal modo in cui lavoro con Haskell e sono
insieme tipo di migliorare il mio apprezzamento
per quello che R è è buono, intendo
filosoficamente sono più inclinato verso
la scuola Haskell delle cose che conosci
come il controllo di tipo statico come il
compilatore che mi aiuta a verificare il mio codice
è corretto ecc. eppure ce ne sono alcuni
cose che erano semplicemente dolorose da fare
Haskell che siamo facili da fare in R così
quando fai analisi esplorativa
che è ciò che R fa bene a dirti
non mi importa dei tipi di gating giusto io
voglio solo vedere se c’è qualcosa
c’è prima se c’è qualcosa lì
sì, allora possiamo tornare indietro e aggiungere tutto il
tipi e test unitari e simili
ma prima voglio solo sapere cosa è
lì e anche io non voglio dover
cambia il tipo di tutte le mie funzioni
perché voglio inserire una stampa
dichiarazione così per quel tipo di
le cose di lavoro esplorativo erano molto di più
conveniente in R ma poi una volta le cose
sono stati sviluppati e tu vuoi avere il
la certezza che tutto sia
tipizzato staticamente e nessun effetto collaterale
così allora è bello tornare su
al lato Haskell ora se lo sei
familiarità con emacs org-mode
org-mode ti dà un modo di incollare
diverse lingue insieme compreso R
ma anche molte altre lingue e
come tutte le cose che Emacs è, è una specie di
crufty è tutto un po ‘strano se
sei la prima volta che lo vedi ma
è anche molto potente di nuovo come un sacco
di cose in Emacs quindi ha supporto
per molte lingue diverse puoi farlo tu
può
usa la modalità org per chiamare un po ‘di
Haskell un po ‘di C o Bosch o
qualunque cosa tu possa mescolare molte cose
insieme
in questo tipo di markup per org-mode e
funziona in modo affidabile multipiattaforma
di cose in questo discorso funzionano ma non possono
lavorare al primo tentativo richiede alcuni
tweaking e hai appena installato le cose
proprio così, ma la mia esperienza con
emacs org-mode è che funziona come
documentato ovunque al primo tentativo
adesso
potrebbe non funzionare come previsto ma lo fa
lavoro come documentato e va bene
documentato quindi è molto buono per
esplorando si sa se dici va bene io sono
lavorando qui sto tenendo appunti
quello che sto facendo chiama alcune chiamate in codice
questo codice in Perl chiama questo codice
qui e vedi tutto quello che ho bisogno di chiamare un po ‘
un po ‘del nostro forse per tracciare qualcosa o
qualunque cosa tu possa inserire in
piccolo codice nel nostro pure e questo
organoide è anche molto buono per i letterati
programmare quindi l’idea di alfabetizzare
la programmazione è ciò che pensi
la tua documentazione come primaria nella tua
il codice è secondario quindi anziché scrivere
il tuo codice e poi scrivi un po ‘
di documentazione sul lato che scrivi
documentazione un codice inline come
necessario in modo che tu possa pensarlo come
commento preso ad un estremo ma è
davvero più di quello che puoi
riorganizzare le cose nel modo in cui è
meglio per un lettore umano piuttosto che
cosa è meglio per un compilatore, così potresti
definire parte di una funzione qui e
spiegalo e poi potresti definire
un’altra parte di una funzione più tardi e
quindi chiedi all’ambiente di fare il pezzo
queste cose in una cosa coerente che
il compilatore può capire e ho giocato
con questo per un po ‘e sai che è
divertente da giocare con oh guarda sto chiamando
queste lingue diverse e poi tu
lo so ed è solo una specie di
giocattolo interessante ma di recente ho fatto un
progetto in cui questo ha davvero salvato il mio bacon
era un era un progetto in cui il
richiedere
i mesi erano molto complicati nel codice
non era così complicato ma giusto
capire cosa doveva essere fatto era
molto era dove sei più probabile
commettere un errore quando stai tirando
cose da fonti oscure e dicendo io
pensa che questo significhi che non è interamente
chiaro ma questo è il motivo per cui penso questo a
documenta tutto ciò che è stato scritto
la programmazione in org-mode è stata davvero una
ottimo modo per andare così ho detto che
org-mode supporta molte lingue
c’è un po ‘di confusione tra
org-mode e org Babel sono un po ‘ il
i termini sono usati in modo intercambiabile
tecnicamente org Babel è la biblioteca
che org-mode sta usando per fare tutto questo
gestione del codice ma c’erano circa 40
lingue l’org Babel org-mode
supporta fuori dalla scatola e poi c’è
molti altri che hanno
supporto di terze parti ma non sono come
ufficiali come quelli che spediscono con
Emacs quindi un file di org mug è una forma di
markup è possibile combinare il markup del testo in lattice
inserendo immagini inserendo link e così via
una sorta di HTML simile ma è più semplice
e puoi anche inserire il codice dove tu
avere una fonte iniziale nel tag sorgente e in
l’inizio o la stagg l’hai detto cosa
lingua che stai usando e poi semplicemente
inserisci quel codice e abbiamo pre-editing
questo dentro Emacs se sei dentro a
blocco di sai che puoi avere il
editor inserisci la tua modalità di modifica così
hai la colorazione della sintassi e così via
avanti per R e poi quando sei in a
sezione di una lingua diversa da
Emacs può modificarlo come quella lingua
anche se è tutto in un file così
ecco un esempio in questo unico mix
insieme il nostro pitone e perla così io
chiamare una funzione seno ho una funzione
scritto in R che restituisce solo il seno
e l’ho chiamato segno underscore R solo
per sottolineare che è scritto nel nostro
non è necessario puoi chiamarlo
qualunque cosa tu voglia ho appena aggiunto il
suffisso per chiarire dove sono le cose
venendo e hai quando lo fai
questo devi passare di default
argomenti così ho appena detto X default
zero quindi dalla mia funzione di cosign che sono
implementarlo in Python e semplicemente
quindi posso sapere che il mio codice funziona se io
e non solo per impostazione predefinita ho impostato il
variabile di default a uno in modo che se
le cose non vengono inizializzate il mio codice
sarà sbagliato quindi se notate nel
blocco sorgente per R il nome del nostro
il linguaggio è con la R maiuscola e il
blocco sorgente per Python il nome di
Python è con la P in lettere minuscole
le lingue in org-mode usano il programma
nome della lingua e in minuscolo qualche motivo
sono non fa in modo che sia la R maiuscola ok
poi si spostano verso la seconda colonna
Prenderò il quadrato dei miei due
valori perché sono sine quadrato più
coseno quadrato deve essere uguale quella giusta così
Lo farò solo in Perl
un’altra lingua e poi la mia chiamata
dichiarazione la sterlina più chiama tutto
in organoidi inizia con sterlina più giusto
perché è qualcosa di improbabile
digitare per errore in altro codice così
in questo caso ora nella chiamata
Sto chiamando la funzione Python che è
quindi chiamando R e Python o così
sembra
quello che sta letteralmente succedendo qui è quello
tutto sta passando per Emacs Lisp
quindi questa è davvero una specie di a
architettura hub-and-spoke in cui le cose
stanno entrando e uscendo da Emacs Lisp così
il Perl non sta letteralmente chiamando R ma
sembra che sia mediato
attraverso Emacs Lisp sotto il cofano e
quindi quando valuti un blocco di codice in
org-mode ti stamperà i risultati così
questo caso, i risultati sono solo un numero
il risultato potrebbe essere un’immagine così se tu
quindi stai facendo qualcosa in qualche altro
lingua, ma si desidera utilizzare la nostra per
tracciare è possibile utilizzare il nostro per inserire un
immagine per una trama va bene un altro modo di
le lingue di interoperabilità erano Giove
quaderni Jupiter ha iniziato come un
Python ma poi hanno cambiato il nome in
de-enfatizza Python quando c’è supporto
per altre lingue quindi il nome
Giove proveniva dalla programmazione Julia
linguaggio Python e R so Jupiter
i taccuini sono molto belli basati su HTML
interfaccia per notebook diversa
le lingue supportano molte differenze
lingue separatamente quindi non è davvero
così tanto una storia di interruzione come a
modo coerente per implementare i notebook in
lingue diverse in modo da poter avere un
Il taccuino Haskell Jupiter che sta usando
Codice Haskell e il nostro taccuino Jupiter
sta usando il nostro e sono coerenti
ma in realtà non stanno condividendo il codice
così tanto rispetto a qualcosa di simile
la modalità org di cui abbiamo parlato
I quaderni di Giove sono meno trasparenti
nel bene e nel male, meglio perché
hai più di un ambiente WYSIWYG
sai che sei un po ‘come a
repple web-based così tu sei
interagendo con qualcosa che trama
qualcosa che trama appare proprio lì
subito dopo dove lo tramate non lo fate
vedere quanti dettagli è bello se
stai esplorando qualcosa naturalmente
l’inconveniente è che c’è di più
andare sotto il cappuccio è più difficile
DIF i file non sono semplici
file di testo si potrebbe dire okay cosa
cambiato tra queste versioni perché
sotto il cofano è un quaderno di Giove
json è una specie di semi-leggibile
e quindi è più difficile da DIF di qualcosa
è più esplicito come in org-mode
quindi alcune delle lingue che sono
supportato da Jupiter Kernels list is
crescendo ogni giorno potrebbe esserci un
nuovo dal momento che ho fatto questa diapositiva è
davvero bello quindi hai una nuova lingua
e si desidera avere questa bella
supporto per notebook per questo è possibile
sulle spalle su quello che hanno già fatto
con Giove un altro fork dell’ipython
il notebook è qualcosa chiamato beaker e
questo dà più di una lingua
Interop story di allora fa Jupiter
puoi mescolare puoi mescolare diversi
lingue e passare i dati tra di loro
attraverso questo questo oggetto beaker globale
Ne farò un esempio in un secondo
e una delle belle caratteristiche di questo
quando se hai a che fare con alcuni dati
è possibile passare i frame di dati
tra le lingue così per molto tempo uno
dei vantaggi del nostro era quello che aveva
questo questo quadro di dati è simile a a
tabella sequel ma le colonne possono essere
diversi tipi e questo ha fatto molto
delle operazioni di analisi dei dati più
conveniente e per molto tempo la storia
era sì, preferirei scrivere Python ma tu
so che R ha questo data frame Python
non ha qualcosa del genere quindi sono
continuerò a usare R e poi West
McCanney ha scritto ai panda questa libreria
che ha tra le altre cose un analogo
ai nostri dati così che cosa fa il becher
si tradurrà tra questi due
tipi di frame dei dati che è davvero
C’è un sacco di cose non v’è
più che semplicemente come sai convertire
una stringa in questa lingua a una stringa in
quella lingua c’è è di più
complicato ma è anche molto
comodo per andare tra quelli che c’è
anche la piuma proietta la piuma di Apache
che fa lo stesso tipo di cosa che
ha un modo di andare tra i nostri
quaderno i nostri dati frame e dati python
telai Torneremo a quella in solo un
minuto quindi ecco un esempio di come tu
sarebbe mescolare lingue
usando il becher in modo diverso
celle nel tuo taccuino conosci Python
cellulare solo se vuoi creare un
variabile foo sull’oggetto beaker globale
hai detto che il becher punto foo al suo interno è uguale
a qualunque cosa si tratti potrebbe essere una stringa a
numero un vettore qualunque se poi lo sei
chiamandolo da un’altra lingua
usa la stessa convenzione di punti che potevi
chiamalo puoi recuperare il valore
allo stesso modo in cui l’hai detto così se lo fossi stato
stai chiamando da Java potresti semplicemente
Potresti avere un punto di coppa piumato su on
il lato destro di un’equazione R è a
Poco diverso quindi devi usare questo
i due punti del colon del becher ottengono la funzione a
estrae le cose dall’oggetto globale e
impostato per rimetterli in questo caso
così ho ciao mondo in cui lo appiccico
l’oggetto beaker globale in Python quindi
nel nostro io lo tiro fuori fare qualcosa con
dice che voglio creare un nuovo
Risposta variabile globale Posso impostarlo in R
e poi rileggilo di nuovo in Python
una cosa strana lì in fondo e
Non dico risposta punto beaker dico
Becher che risponde alla parentesi 0 perché
non ci sono numeri nel nostro c’è solo
vettori così quando imposto questa cosa è uguale
a 42 in realtà l’ho impostato su un vettore di
lunghezza uno contenente 42 ecco perché io
devo leggerlo come un vettore anche
anche se l’ho messo come uno scalare tutto bene
quindi alcune delle diverse lingue
supportato da becher per i nostri scopi ha
la nostra che è quello di cui stiamo parlando
oggi e ne ha parecchi altri
cose piacevoli che considera casualmente
Python 2 e Python 3 devono essere separati
lingue così bene e poi il
il modo finale di miscelazione è con gli altri
lingue che ho voluto parlare di
era il nostro segnato giù così questo è più dentro
lo spirito del markup di org-mode simile a
Giove o
taccuini per i bicchieri, ma è di più
basato sul testo quindi se hai a che fare con
Giove sai che stai lavorando
in un browser e ci sono cose
che sono nascosti da te se stai usando
il nostro markdown stai lavorando in un testo
editor fino a quando non si desidera esportarlo
stai lavorando nel tuo file di testo e dici
okay mi piacerebbe vedere questo h2 come HTML tu
esportalo in questo modo ma non lo sei
lavorando in un browser di per sé e simili
con con beaker puoi scambiare dati
tra R e altre lingue tramite dati
cornici e perché questo è pensato per
questo tipo di calcolo basato su documenti
ci sono molti modi diversi per te
può esportare il nostro markdown diverso
i diari hanno guide di stile per te
diciamo che qui c’è un nostro file di markdown
vuoi esportare come articolo di giornale per
questo diario puoi fare che esporti
Mi piace esportare in HTML e diversi
variazioni su quello così alcuni del marchio
lingue supportate dal nostro markdown
quello non può essere familiare è la bancarella
l’ultimo della lista è una lingua
per fare l’analisi bayesiana della catena Markov
Monte Carlo e così via che è
qualcosa che è popolare nel nostro modo
ecco un esempio di come useresti il nostro
markdown per usare una lingua che hai appena
tre zecche posteriori e poi dargli il
nome della lingua in parentesi graffe e poi
scrivi il tuo codice e poi tre
backtick due per terminarlo così dentro il
il nostro blocco che sto scrivendo sono dentro
il blocco Python sto scrivendo Python e
puoi scambiare dati avanti e indietro
tra le lingue non funziona più lontano
come so ma puoi scambiare dati
tra i tuoi blocchi usando i dati
cornici e basta tornare indietro di un secondo
le lingue supportate dal nostro
giù è il nostro CPP quindi se hai il nostro codice
nel tuo file markdown e vuoi
per ottimizzarne un po ‘è possibile creare
un altro blocco del nostro codice CPP e chiamata
quel codice dal tuo codice R
va bene quindi in sintesi perché lo faresti
voglio mescolare R in altre lingue
tipicamente vuoi chiamare dal nostro
per l’efficienza in cui si desidera chiamare
in R per afferrare alcune funzionalità che R ha
un numero di differenze se sei se
stai volendo usare sono proprio come te
il tuo programma Java che vuoi
Radar per alcune cose carine che succederà
fai per te alcune cose a cui prestare attenzione
ci sono alcuni capricci che conosci una serie di
i numeri potrebbero non tutti contenere
numeri ecc e una cosa sulla maggior parte di
questi approcci non sono quasi nessuno di loro
ha funzionato al primo tentativo che è giusto
la natura della bestia alcuni di questi
le cose sono un po ‘delicate e come te
installarli promuovere per la maggior parte di questi
Ho avuto problemi in cui LK lavora su questo
il computer non funziona su questo computer
perché forse il nostro in un po ‘diverso
posizione e devo dire dove R
è o o la fase della luna
diverso o qualsiasi cosa così dirò la
questi metodi sono un po ‘pignoli
e un po ‘difficile da impostare noi
parlato di lavoro Babele e se ha detto sì
org Babel è l’unica cosa che ha funzionato
molto bene su ogni piattaforma che ho provato
su tutti i computer ho provato su di esso
ha funzionato come documentato ma poi di nuovo
forse non come previsto, ma se tu se tu
leggi la documentazione che funziona
come documentato e in generale il più
maturo il modo più potente per connettersi
tra R e qualcos’altro è finito
il nostro CPP quindi se non hai un progetto
non scritto in C ++ puoi usare uno straniero
divertimento
un’interfaccia per passare attraverso il nostro CPP a
il nostro che è probabilmente il migliore
approccio generale, quindi se vuoi dettagliato
controllare esattamente cosa sta succedendo e
fuori dal nostro CPP è la strada da percorrere se
non ne hai bisogno allora in alcuni
lingue hai un livello superiore
interfaccia per passare attraverso le cose
va bene quindi assicurati di scrivere la sessione
e se vuoi, se ne hai
domande Io prenderò domande giuste
ora ma se pensi a una domanda in a
pochi giorni che vorreste per voi mi chiedono
potrebbe mandarmi una e -mail o potresti controllare il mio
sito web o qualunque sia il mio contatto
informazioni e grazie mille va bene così
con quale lingua preferisci usare
il nostro e per quello che è il più delle volte
utilizzare Python perché ha quello che mi serve che
significa che il nostro è un linguaggio statistico
è fantastico se stai facendo statistiche se
stai facendo una programmazione più generale
devi fare un file munging te
necessario creare un servizio web che devi
fai questo o quello conosci questo tipo di
cose forse potrebbe essere fatto in ARB è
tipo di imbarazzante la cosa che mi piace
Python non è un brutto linguaggio per
tutto ciò che voglio fare forse non è il
meglio, ma va bene così posso restare
una lingua più lunga se lo faccio se se
il Python è abbastanza efficiente se lo è
non pescando abbastanza, di solito scrivo C ++ I
non in generale non cerco di fare
Python più veloce non provo a farlo sono
più veloce se non è abbastanza veloce
Mi limito e scrivo C ++ perché
allora so che sarà più veloce mentre
se si prova a non creare un linguaggio di scripting
più veloce vai a monte, lo sai
stai andando contro il grano potrebbe
lavoro ma potresti spendere un paio di
giorni a cercare le cose e da nessuna parte io
preferisco non farlo
quindi quella era una domanda attraverso l’app
altre domande vivono molto bene
domanda quindi come funziona a
produzione contro esplorazione si ho
usato hanno usato questo in produzione con a
un po ‘ di paura e in alcuni casi e
non altri così con Haskell R che abbiamo fatto
uso quello in produzione, credo
questo è sicuro per le persone che
lo stanno sviluppando conoscendo il look
le stranezze della nostra allocazione di memoria e
gestire le eccezioni se qualcosa va
ho sbagliato hanno fatto un molto professionale
lavoro di integrazione di questi due e là
potrebbe usare sono in produzione senza
esitazione se hai qualche codice R quello
qualcuno ti ha dato così bene qui che ho
scritto questo codice R tutto ciò che devi fare
è mettere un interfaccia web su di esso I
avremmo paura di questo, non importa come
beh, non importa quale strumento stai usando
perché le persone che stanno scrivendo sono per
il loro uso non pensa a come
le cose funzioneranno su un server
sono dichiarazioni di stampa che potrebbero esserci
qualcosa in cui si aspettano
qualcuno eo qualcosa o qualunque cosa
non è solo non pronto per una produzione
ambiente ho usato la cosa di Rd
di nuovo in produzione con un po ‘ di
paura e tremore ma abbiamo creato
messo in quarantena sul proprio server e utilizzare
quello in produzione la maggior parte di questi altri
le cose sarebbero più per interattivo
esplorazione come immagino che qualcuno potrebbe
usa Emacs in produzione per includere
cose insieme che sarebbero una specie di
strano ma forse potrei farlo sì
signore okay sì sì gli strumenti per le domande
traduci in JavaScript così potresti farlo
eseguilo in un browser che non conosco
ma il nostro studio ha un progetto chiamato
lucente che ti permetterà di sviluppare
pagina web interattiva
usando il nostro sì dal modo in cui ho un ho avuto
una citazione di Hadley Wickham che intendevo fare
dì di più su Hadley, lui è ora al nostro
studio se hai intenzione di usare il nostro
guarda seriamente Hadley Wickham e il suo
sito Web e tutti i suoi strumenti che è
scritto un codice fantastico che questo
ti protegge da alcune delle stranezze
del nostro è che ha scritto molto di veramente
strumenti utili che ti permettono di lavorare
a un livello più alto
altre domande va bene se tu
pensa a qualcosa dopo mi spara e
Sarò felice di rispondere più tardi se io se
Posso tutto bene grazie
Please follow and like us: