CONNOR HARRIS: Still I pensare alcuni video emozionante prodotto da una società di consulenza professionale che utilizza R molto nel suo lavoro. NARRATORE: Cosa c'è dietro le statistiche, le analisi e le visualizzazioni gli scienziati più brillanti dati che oggi e imprenditori si affidano a di prendere decisioni forti? Non si può sempre vedere. Ma è lì. Si chiama R, open source r-- il linguaggio di programmazione statistica che gli esperti di dati di tutto il mondo oltre l'uso per tutto dalla mappatura ampia sociali e le tendenze di marketing online allo sviluppo della finanziaria e clima modelli che aiutano a guidare le nostre economie e comunità. Ma che cosa è esattamente R e dove ha fatto R cominciare? Beh originariamente, R iniziato qui con due professori che voleva una statistica migliore piattaforma per i loro studenti. Così hanno creato un modellato dopo il linguaggio statistico S. Essi, insieme a molti altri, tenuti a lavorare su e con R, la creazione di strumenti per la R e la ricerca nuove applicazioni per R ogni giorno. Grazie a questo è sforzo della comunità in tutto il mondo, R ha continuato a crescere con migliaia di librerie create dall'utente costruiti per migliorare la funzionalità e R convalida qualità crowd-sourced e il sostegno della più riconosciuta leader del settore in ogni campo che utilizza R. Che è grande, perché R è il migliore in quello che fa. Erba esperti in modo rapido e facilmente interpretare, interagire con, e visualizzare i dati mostrando la loro rapida crescente comunità di utenti in tutto il mondo R e vedere come l'open source R continua a plasmare il futuro di statistica l'analisi e la scienza dei dati. CONNOR HARRIS: OK, grande. Quindi la mia presentazione sarà un po 'più sobrio. Non coinvolgerà più di tanto emozionante musica di sottofondo. Ma come avete visto nel video, R è una sorta di un linguaggio generico programma di scopo. Ma è stato creato per lo più per il lavoro statistico. Così è stato progettato per le statistiche, per l'analisi dei dati, per il data mining. E così si può vedere questo in un sacco di le scelte progettuali che i produttori di R fatto. È progettato per gran parte, persone che non sono esperti di programmazione, che sono solo raccogliendo programmazione sul lato in modo che possano fare il loro lavoro nelle scienze sociali o nelle statistiche o qualsiasi altra cosa. Ha un sacco di molto importanti differenze da C. Ma la sintassi e paradigmi che usa sono sostanzialmente gli stessi. E si dovrebbe sentire abbastanza a casa destra fuori del blocco. E 'un linguaggio imperativo. Non preoccupatevi troppo di che se non si conosce il termine. Ma c'è una differenza tra imperativo, dichiarativa, e funzionale. Imperativo significa solo fare dichiarazioni che sono fondamentalmente i comandi. E poi l'interprete o il computer esegua uno per uno. È debolmente tipizzato, esistono non dichiarazioni di tipo a R. E poi le linee tra i diversi tipi sono un po 'più sciolto rispetto sono in C, per esempio. E come ho detto ci sono molto ampie strutture per i grafici, a fini statistici analisi, per il data mining. Questi sono entrambi integrati nel linguaggio e, come ha detto il video, migliaia di librerie di terze parti che è possibile scaricare e utilizzare gratuitamente con condizioni di licenza molto sciolto. Quindi, in generale, vi consiglio che si guarda a questi due libri se si sta andando a lavorare su R. One di loro è il funzionario R principianti guida. È gestito dal sviluppatori principali di R. È possibile scaricarlo di nuovo, privo di carica e legalmente in quel link lì. Tutte queste diapositive stanno per andare su internet, sul sito CS50 Dopo questo è fatto. Quindi non c'è bisogno di copiare le cose freneticamente. L'altro è un libro di testo da Cosma Shalizi, che è un professore di statistica Carnegie Mellon, denominata Advanced Data Analisi da un Punto Elementare di vista. Questo non è principalmente un libro R. Si tratta di un libro e statistiche è un libro di analisi dei dati. Ma è molto accessibile a persone che avere un minimo di conoscenze statistiche. Non ho mai preso un corso formale. So solo che i pezzi da diversi soggetti alleati che ho preso corsi. E io ero in grado di capire perfettamente bene. Tutte le figure sono date in R. Sono realizzati in R e hanno anche listati di codice sotto ogni figura che dirvi come fare ogni figura con codice R. E questo è molto utile se si sta cercando di emulare una figura che si vede in un libro. E scaricare di nuovo libero stat.cmu.edu/cshalizi/ Siamo spiacenti, che dovrebbero essere gli slash cshalizi tilde. Farò in modo di correggere che quando le diapositive ufficiali salgono. / ADAfaEPoV che è solo la acronimo del titolo del libro. Così generale caveats-- R ha un sacco di funzionalità. Sto solo andando a essere in grado di coprire le la superficie di un sacco di cose. Anche la prima parte del seminario sta per essere una sorta di discarica di dati. Sono abbastanza dispiace. Fondamentalmente, ho intenzione di farvi conoscere un sacco di cose destra fuori del blocco, andando il più rapidamente possibile. E poi si arriva a la parte più divertente, che è la demo dove posso mostrarvi tutto che abbiamo parlato sullo schermo. E si può giocare da soli. Quindi ci sara 'un sacco di materiale tecnico vomitato su qui. Non preoccuparti di copiare tutto che verso il basso. Perché A, è possibile ottenere tutte le roba sul sito CS50 più tardi. E B, non è poi tanto importante memorizzare questo dalle diapositive. E 'più importante che si ottiene alcuni facilità intuitiva con esso e che viene da solo a giocare in giro. Allora perché utilizzare R? In sostanza, se si dispone di un progetto che comporta estrazione grandi insiemi di dati, i dati visualizzazione, si dovrebbe usare R. Se sei fare analisi statistiche complicate, che sarebbe difficile in Excel, per esempio, sarebbe anche essere buono-- anche se si sta facendo statistici analisi che è automatizzato. Diciamo che si sta mantenendo un sito web. E si desidera leggere il log del server ogni giorno e compilare qualche lista, come i primi paesi che gli utenti sono provenienti da, alcune statistiche riassuntive sulla durata trascorrono sul tuo sito web o qualsiasi altra cosa. E si desidera eseguire questo ogni giorno. Ora, se si sta facendo questo in Excel, dovreste andare al vostro log del server, importare che in un Foglio di dati di Excel, eseguire tutte le analisi manualmente. Con R, si può semplicemente scrivere un copione. Pianificarne l'esecuzione ogni giorno dal sistema operativo. E poi ogni sera alle 02:00, o quando si pianifica per eseguire, apparirà attraverso il vostro traffico internet per quel giorno. E poi il giorno dopo, ti avere questa brillante, nuovo rapporto o qualunque con tutte le informazioni che hai chiesto. Quindi, in pratica R è per Cisco la programmazione contro analisi Cisco. Preliminare è fatto. Entriamo nelle cose reali. Quindi ci sono tre reali Tipi in lingua. C'è tipo numerico. C'è una sorta di differenza tra interi e virgola mobile, ma non proprio. C'è un personaggio tipo, che è stringhe. E c'è una logica tipo, che è booleani. Ed è possibile convertire tra i tipi usando queste funzioni come numerico, come personaggio, come logico. Se si chiama, per esempio, come numerico su una stringa, cercherà di leggere la stringa come un numero, allo stesso modo che a2i e scanf fanno, e C. Se si chiama come numerico sul vero o falso verrà convertito a 1 o 0. Se si chiama come personaggio su qualsiasi cosa che sarà convertire in un rappresentazione di stringa. E poi ci sono i vettori e matrici. Quindi, i vettori sono fondamentalmente 1 array bidimensionali. Sono ciò che noi chiamiamo gli array in C. Matrici, 2 array bidimensionali. E poi più alto matrici tridimensionali che potete hanno 3, 4, 5 o qualsiasi altra cosa dimensioni di valori numerici, di stringhe, I valori di logici. Hai anche le liste che sono una sorta di array associativo. Prendo in quello un po '. Quindi una cosa importante che viaggi di persone in R è che non esistono reali, tipi atomici puri. Non c'è distinzione reale tra un numero, come un valore numerico, e un elenco di valori numerici. I valori numerici sono in realtà il stessi delle vettori di lunghezza 1. E questo ha un certo numero di importanti implicazioni. Uno, significa che si può fare cose molto facilmente che coinvolgono come l'aggiunta di un numero per un vettore. R sarà fondamentalmente figura che cosa si intende con questo. E io riesco anche a che in un secondo. Questo significa anche che non c'è modo per il tipo checker-- nella misura che una cosa del genere esiste in R-- per raccontare quando hai superato il valore singolo quando si aspetta un array o viceversa. E che può causare qualche strano problemi che ho incontrato quando Stavo usando R durante il mio lavoro estivo. E non ci sono di tipo misto array. Così non si può avere una matrice sono stati i primi elementi è, non so, la stringa "John" e la secondo elemento è il numero 42. Se si tenta di farlo, allora si otterrà tutto solo convertito in una stringa. Così abbiamo stringa John, string 42. Sintattico così insolito features-- più R di sintassi è molto simile a C. Ci sono alcune importanti differenze. La digitazione è molto debole. Quindi non ci sono dichiarazioni di variabili. Assegnazione utilizza la strana operatore errore inferiore al trattino. I commenti sono con il carattere cancelletto. Credo che oggi giorno lo chiamiamo hashtag anche se questo non c'è davvero precisione: la doppia barra. Residui modulari sono con %% segni. Divisione intera è con% /% che è molto difficile da leggere quando è proiettato sullo schermo. È possibile ottenere intervalli di interi con i due punti. Quindi 2,5 vi darà un vettore di tutti i numeri da 2 a 5. Gli array sono uno-indicizzati, che si avvita un sacco di gente up se sono da più linguaggi di programmazione tipici, come il C, dove la maggior parte le cose sono zero indicizzati. Ancora una volta, questo è dove il patrimonio di R come linguaggio per come non programmatori professionisti viene in. Se sei un sociologo o un economista o qualcosa e si sta cercando di utilizzare R fondamentalmente come coadiuvante al più importante lavoro professionale, si sta andando a trovare uno-indicizzazione un po 'più naturale. Perché si cominci a contare a 1 nella vita quotidiana, non 0. Per-loop, questo è simile a il costrutto foreach in PHP, che si arriva a imparare dentro-- molto presto. Che è per il valore nel vettore e allora si può fare le cose con il valore. PUBBLICO: che è venuto in conferenza. CONNOR HARRIS: Oh, questo è venire conferenza, eccellente. PUBBLICO: L'assegnazione, è dovrebbe puntare da destra a sinistra? CONNOR HARRIS: da destra a sinistra, sì. Si può pensare ad esso come valore su destra spinto nella variabile sulla sinistra. PUBBLICO: OK. CONNOR HARRIS: E infine sintassi della funzione è un po 'strano. Lei ha il nome della funzione foo, assegnato a questa funzione chiave, seguita da tutti gli argomenti e quindi la corpo della funzione dopo. Ancora una volta queste cose possono sembrare un po 'strano. Faranno diventare una seconda natura dopo si lavora con la lingua per un po '. Così vettori, il modo si costruisce un vettore si è di tipo C, che è una parola chiave, quindi tutti i numeri desiderati o stringhe o qualsiasi altra cosa. Argomenti anche essere vettori. Ma la matrice risultante viene appiattito. Così non si può avere array dove alcuni elementi sono numeri singoli e alcuni elementi sono array stessi. Quindi, se si tenta di costruire un nell'array ha il primo elemento è 4 e il secondo elemento è il 3,5 matrice vi solo ottenere una matrice di tre elementi, 4,3,5. Non possono essere di tipo misto. Se si tenta di leggere o scrivere al di fuori dei limiti di un vettore si otterrà il valore denominato NA un che sta per un valore mancante. E questo è destinato come statistici che stanno lavorando con set di dati incompleti. Se si applica una funzione che dovrebbe per fare solo un numero in un array allora ciò che si otterrà è, il funzione mappare la matrice. Quindi, se la funzione diciamo prende un numero e lo restituisce quadrati. Si applica che alla matrice 2,3,5 Quello che otterrete è la matrice 4,9,25. E questo è molto utile perché ti significa non c'è bisogno di scrivere per anelli per fare cose molto semplici, come l'applicazione una funzione per tutti i membri di un set di dati. Che, se si sta lavorando con grande insiemi di dati, si deve fare molto. Funzioni binarie sono ingresso applicata da ingresso. Prendo in quello. È possibile accedere con gli array o vettori con parentesi quadre. Staffe in modo nome vettore quadrati 1 vi darà il primo elemento. Nome Vector parentesi quadre 2 vi darà il secondo elemento. È possibile passare un vettore degli indici e sarete tornare fuori fondamentalmente un fattore secondario. Così si può fare vettore staffe nome C, 2,4 e si otterrà un vettore contenente la seconda e la quarta elementi dell'array. E se si desidera solo una statistica riassuntiva rapido di un vettore come interquartile gamma, mediana, massimo, qualunque cosa, si può semplicemente digitare sommario Nome vettore e ottenere che fuori. Questo non è davvero utile in la programmazione ma se stai giocando intorno agli insiemi di dati, è a portata di mano. Matrices-- fondamentalmente array di dimensione superiore. Hanno questa sintassi speciale notazione. Matrix con una serie che ottiene pieno dentro-- dispiace, matrice con i dati, numero di righe, numero di colonne. Quando si dispone di alcuni dati, si riempie la matrice fondamentalmente che va verso il basso primo. Poi sinistra a destra. Così, così. E R ha costruito in moltiplicazioni matrice, decomposizione spettrale, diagonalizzazione, un sacco di cose. Se volete di dimensione superiore array, quindi 3, 4, 5, o qualsiasi altra cosa dimensioni si può fare. La sintassi è uguale matrice fioca c, allora la lista delle dimensioni. Quindi, se volete una matrice bidimensionale 4 con dimensioni 4, 7, 8, 9, l'array, dim uguale c (4,7,8,9). È possibile accedere a singoli valori con staffe prima voce comma seconda voce. È possibile ottenere intere fette di righe o colonne. Con questa sintassi è incompleta solo remare numero di virgola o colonna virgola numero. Così liste sono una sorta di matrice associata. Hanno la loro sintassi qui. Ancora una volta non fare freneticamente copiare tutto questo in giù. Questo è solo così che le persone passando attraverso le diapositive più tardi avere tutto questo in un bel riferimento. E questo diventerà una volta molto naturale Io in realtà cammino attraverso le demo. Quindi elenca un array fondamentalmente associati. È possibile accedere ai valori di nome della lista, il simbolo del dollaro, chiave. Quindi, se la vostra lista si chiama foo, allora è possibile accedere in quel modo. È possibile ottenere un intero coppia chiave-valore passando nell'indice parentesi quadre. Se si legge da un inesistente chiave, si otterrà nulla. Non sarà errore. Il fatto è, R farà come molto con nullo in quanto si può. E questo può significare che se siete non mi aspettavo di ottenere nulla fuori di qualche lista di lettura, si otterrà un po ' errori irreversibili più in basso la linea. Questo è accaduto a me il mio lavoro estivo quando stavo usando R dove ho cambiato come un certo elenco è stato definito in uno spot ma non ha modificato in seguito alla codice che legge i valori da esso. E così quello che è successo è stato che ero la lettura di valori nulli su questo elenco, passarli in funzioni, ed essendo molto confuso quando ho visto tutti i tipi di infiniti casuali saltar fuori in questa funzione. Perché se si applica certo il massimo o funzioni minime per nulla, si otterrà valori infiniti fuori. Frame di dati, sono una sottoclasse di lista. Ogni valore è un vettore della stessa lunghezza. E sono utilizzati per la presentazione, fondamentalmente, tabelle di dati. C'è questa sintassi di inizializzazione. Questo tutto, ancora una volta, essere molto più chiaro quando si arriva alla demo. E la cosa bella frame di dati è che si può dare i nomi a tutte le colonne e nomi a tutte le righe. E in modo che rende l'accesso loro un po 'più amichevole. Anche questo è il modo più funzioni leggere i dati da fogli di calcolo Excel o da file di testo, per esempio, leggerà nei loro dati. Metteranno in una sorta di cornice dati. Così functions-- le funzioni sintassi è un po 'strano. Ancora una volta è il nome della funzione, assegnare, questa funzione parola chiave e poi la lista degli argomenti. Così ci sono alcune cose belle di come funzioni lavorano qui. Per uno, si può effettivamente assegnare valori di default per alcuni argomenti. Così si può dire R1 equals-- si può dire foo è una funzione in cui R1 è uguale a qualcosa Per impostazione predefinita, se l'utente specifica nessun argomento. In caso contrario, è ciò che ha messo in. E questo è molto utile perché un sacco di nostre funzioni hanno spesso decine o centinaia di argomenti. Per esempio quelle per la stampa grafici o plotting grafici a dispersione avere argomenti che controllano tutto dal titolo e l'asse etichette per il colore delle linee di regressione. E quindi se non si vuole per rendere le persone specificare ognuno di questi centinaia di argomenti controllare ogni singolo aspetto della una trama o una regressione o qualsiasi altra cosa, è bello avere questi valori predefiniti. E allora si può effettivamente scrivere come si è visto di nuovo qui. O trovare un esempio migliore. Quando si chiama funzioni si può effettivamente li chiamano con i nomi degli argomenti. Quindi, ecco un esempio di il costruttore della matrice. Prende tre argomenti. Di solito si dispone di dati, che è un vettore. Avete N fila, che è il numero di righe. Avete N cols-- numero di colonne. Il fatto è che se si digita N riga corrisponde a qualunque e col N è uguale a qualsiasi altra cosa quando si sta chiamando questa funzione, si può effettivamente li retromarcia. Così si può mettere prima e N fila col N secondo e non farà alcuna differenza. Ecco, questo è un po 'bella caratteristica. Ha fatto importazione ed esportazione. Questo può essere fatto, sostanzialmente. Ci sono anche strutture per scrivere fuori arbitrario R si oppone a un file binario e poi leggerli di nuovo in un secondo momento. Che è utile se si sta facendo una grande sessione di R interattiva e è necessario salvare le cose molto rapidamente. Per impostazione predefinita, R ha una directory di lavoro che i file vengono scritti fuori in e leggere di nuovo in da. Si può vedere che con getwg, cambiarlo con setdw. Nulla di particolarmente interessante Così ora i statistiche reali stuff-- regressione multilineare. Così la sintassi usuale è un po 'complicato. Il modello è un grande oggetto di fondo. Esso viene assegnato a LM che è una chiamata di funzione. Il primo elemento, y x1 tilde più qualunque. La mia sintassi: ecco un po 'di confusione. Sono abbastanza dispiaciuto, questo è il modo standard che i libri di informatica fanno. Ma è un po 'strano. Quindi, fondamentalmente, è lm parentesi, prima voce è variable-- dispiace, dipendente tilde x1 variabile più x2 più tuttavia molti indipendenti le variabili che avete. E poi queste possono essere sia vettori, tutti della stessa lunghezza. Oppure possono essere colonna intestazioni in un frame di dati che hai appena specificato nel secondo frame di dati argomento. È inoltre possibile specificare una formula più complessa in modo da non dover linearmente regredire una variabile un dipendente, o un vettore in un vettore preesistente. Si può fare, per esempio, un Componente vettore y al quadrato più 1 e regredire che contro la log di qualche altro vettore. È possibile stampare un sommario delle modello con questo comando chiamato summary-- solo sommario parens modello. Ancora un'altra cosa vorrei chiarire. Un'altra cosa che andranno corretti quando le diapositive salire su internet. Se si desidera solo per il calcolo una semplice correlazione è possibile utilizzare la correlazione vettore 1 vettore 2 nucleo funzione. Metodo è di default Correlazioni di Pearson. Questi sono quelli standard che si possono fare. C'è anche Spearman e Correlazioni Kendell che sono certa varietà di correlazione graduatoria. Beh, non si calcolano prodotto momenti tra i vettori stessi, ma di rango ordini del vettore. Spiegherò che più tardi. PUBBLICO: Domanda veloce CONNER HARRIS: Certo. PUBBLICO: Così, quando sei il calcolo per i semplici correlazioni fanno si assume che ci sia una statistica importanza per la correlazione? CONNER HARRIS: Non devi farlo. Un lm è fondamentalmente solo una macchina. Ci vorranno due cose e sarà sputare fuori coefficienti per la retta di regressione. Riferisce anche di serie errori su tali coefficienti. E vi dirà, come è il intercettare statisticamente significativo o differenza da 0. È la pendenza della migliore curva di adattamento statisticamente diverso da zero, eccetera. Così assume nulla, penso è migliore risposta alla tua domanda. OK. Plotting-- così la ragione principale si dovrebbe utilizzare R, come la regressione multilineare. In pratica tutte le lingue ha qualche struttura per questo. E la sintassi onestamente di R per regressione è un po 'arcana. Ma tracciato è dove brilla davvero. La funzione di cavallo di battaglia è trama e richiede due vettori, xe y. E poi i puntini di sospensione si distingue per un tempo molto gran numero di argomenti opzionali che controllare tutto, dai titoli a colori di varie linee o punti diversi, al tipo di trama. Si può avere dispersione trame o grafici lineari. [Incomprensibile] 2 vettori della stessa lunghezza. È possibile far precedere questo Allega frame di dati nello script. E questo vi permetterà di utilizzare solo colonna intestazioni invece di vettori separati. È possibile aggiungere le rette più appropriate e locali curve di regressione per il grafico. Questi comandi elencati qui, ab linea e le linee, Per impostazione predefinita, questi ottenere scritto in finestre pop-up perché presuppone che si sta utilizzando R in modo interattivo. Se non sei si può scrivere due file che sono in realtà qualsiasi formato desiderato. Spiacente, non ho un errore di battitura Ho appena realizzato. Se si desidera aprire un altro dispositivo grafica è possibile utilizzare questa funzione chiamata PNG o JPEG o un sacco di altri formati di immagine. Ed è possibile scrivere i grafici a qualunque sia il nome del file specificato. Per annullare che si deve use-- Non ho scritto questo nel slide-- ma c'è una funzione chiamata dev dot off che non ha argomenti. Poi ci sono strutture per plotting 3D e per il contorno tracciato se si vuole fare grafici delle due variabili indipendenti. Non voglio entrare in queste ora. Ci sono anche alcuni strutture per l'animazione quelli sono di solito gestito da terzi. Ho fatto le animazioni con grafici R, ma non ho usato queste terze parti biblioteche. Quindi non posso davvero attestare per quanto sono bravi. Quello che mi raccomando se volete per fare animazioni con R è che si può scrivere fuori tutti le cornici per le animazioni e quindi è possibile utilizzare un program-- terzi quelli tipici sono chiamati FFmpeg o ImageMagick-- cucire tutti i fotogrammi in una sola animazione. Così il tempo per demo. Quindi, se si sta utilizzando qualsiasi sistema Unix che è Linux BSD, ma che usa BSD. OS X aprire una finestra di terminale e tipo R al prompt dei comandi. Se si dispone di R monolocale o simili, che funziona anche. Per gli utenti Windows si dovrebbe essere in grado di trovare R nel menu Start. Si dovrebbe essere chiamato qualcosa come R x64 3 punti qualsiasi. Aprite che lassù. Così ora lasciatemi aprire una finestra di terminale. Va bene, la ricerca. PUBBLICO: Command-Space CONNER HARRIS: Command-Space, grazie. Io non lo uso normalmente Mac. Terminal, mostrano una nuova finestra. Nuova finestra è impostazioni base, R. Così si dovrebbe ottenere un messaggio di benvenuto, una cosa del genere. Così sto usando R in modo interattivo. È anche possibile scrivere script R, naturalmente. Fondamentalmente script vengono eseguiti esattamente allo stesso modo come se foste seduti davanti al computer digitando in ogni riga uno alla volta. Quindi partiamo facendo un vettore. Una freccia C 1, 2. 1, 2, 4. Ok sicuro. Posso fare la dimensione del carattere più grande. PUBBLICO: Comando-Plus CONNER HARRIS: Command-Plus. Comando-Plus. Va bene, come sarebbe? Buona? OK. Quindi cominciamo da dichiarazione di una lista di vettore. Fare un, freccia, C 1,2,4. Possiamo vedere una. Non preoccuparti per la staffa lì. Le staffe sono quindi se stampare molto lunghi array, siamo in grado di dove siete. Un esempio sarebbe se mi voglio solo intervallo 2-200. Se ho stampato un lunga serie, le staffe stanno solo così posso mantenere traccia di quale indice siamo in se sto cercando attraverso questo visivamente. Quindi in ogni caso, abbiamo una. Così ho detto prima che gli array interagiscono molto bene con, per esempio, operazioni unarie come questo. Allora, cosa pensi che io sarò ottenere se si digita una più 1? Sì. Bene, ora ti farò questo diverso array. Diciamo b c 20,40, 80. Allora, cosa ne pensate questo comando fare? Aggiungere gli elementi. E così fondamentale che è quello che fa. Quindi questo è abbastanza conveniente. Quindi io come su faccio questo. c è, diciamo, 6 volte da 1 a 10. Così che cosa voglio vedere contenuto, cosa ne pensi? Così tutti multipli di sei. Ora, che cosa ne pensi succede se faccio questo? Farò questo un po 'più chiaro, c, c. Quindi ciò che accade, si fa pensare, se faccio questo? un plus c. [Incomprensibile] PUBBLICO: o un errore oppure aggiunge solo i primi tre elementi. CONNER HARRIS: Non proprio. Questo è quello che abbiamo ottenuto. Quello che succede è un più breve array, una, ottenuto in bici. Così abbiamo ottenuto 124, 124, 124. Già. E in fondo, è possibile visualizzare questo comportamento prima, una più 1, come una sottoclasse di questo comportamento, dove la matrice più breve è solo il numero 1, che è una matrice di un elemento. Ho solo essere dicendo vettore tutto il tempo invece di matrice, perché è quello che la r la documentazione di solito. Si tratta di una radicata abitudine c. OK, e così ora abbiamo questo array. Così abbiamo questo array, c. Siamo in grado di ottenere sintesi statistiche sui c, sintesi c. E questo è bello. Così ora facciamo alcune cose matrice. Diciamo che m è una matrice. Facciamo un tre a tre uno. Così nrows uguale a 3, e ncols uguale a 3. E per i dati diamo fare-- così che cosa pensi che questo sta per fare? A destra, è il prossimo. E 'nrow e nColumn. Quindi quello che ho fatto è che ho dichiarata matrice tre per tre e ho passato in un array di nove elementi. Così il logaritmo di tutte le Elementi da uno a nove. E tutti quei valori riempiono il scusate array--? PUBBLICO: Quelli sono di base 10 registri? CONNER HARRIS: No, registro è logaritmi naturali, così in base e. Sì, se si voleva di base 10 log, penso che avresti per registrare tutto ciò che, diviso per log 10. E così i dati del [incomprensibile] solo riempie l'array, quindi verso il basso, poi da sinistra a destra. E se si voleva fare qualche altro array, diciamo n è matrice. Facciamo, io non lo so, da 2 a 13. O Farò qualcosa di più interessante. Farò 2-4. nrow è uguale, diciamo, 3. ncol uguale a 4. n. Quindi abbiamo questa. E ora, se vogliamo moltiplicare questi, faremmo volte n per cento per cento, perché è n. E abbiamo prodotti di matrice. In essi modo, hai visto come quando ho dichiarato n, il 2-4 vettore ottenuto pedalato fino si riempie tutto di n? Se si voleva prendere la decomposizione autovalore, questo è qualcosa che possiamo fare molto facilmente. Possiamo fare eigen n. E così questo è il nostro primo incontro con un elenco. Così Eigen n è una lista con due chiavi. I valori, che è questa matrice qui. E vettori, che è questo array qui. Quindi, se si voleva estrarre, per esempio, questa terza colonna dalla matrice autovettori, perché gli autovettori sono vettori colonna. Così possiamo fare eigen vec n simbolo del dollaro vettori, comma 3, del [incomprensibile]. Vec. È che, come ci si potrebbe aspettare. Poi dicono n volte volte cento vec. Così il risultato qui si presenta certamente come se abbiamo preso il terzo autovalore qui, che corrisponde con il terzo autovettore. E 'appena moltiplicato tutto questo autovettore, componente-saggio, dal autovalore. Ed è quello che ci si aspetterebbe, perché è quello che autovalori sono. Qualcuno qui non preso algebra lineare? Un paio di persone, OK. Basta girare i vostri cervelli fuori per un po '. E infatti se prendiamo eigen n I valori simbolo del dollaro 3 volte VEC, anche ottenere la stessa cosa. E 'formattato in modo diverso come una riga vector invece di un vettore colonna, ma grande affare. E così quelle sono fondamentalmente il bello cose che possiamo fare con le matrici, liste dimostrato. Devo dimostrare la bella cose sulle funzioni pure. Quindi cerchiamo di say-- [incomprensibile] la funzione, la chiamata di let esso func contro la funzione di n n squared-- in realtà, questo non è davvero il migliore. a, b, un quadrato più b. Quindi una cosa su funzioni, ancora una volta, sono loro non hanno bisogno di istruzioni return esplicite. Così si può solo-- il ultima dichiarazione valutato sarà la dichiarazione restituito, o il valore restituito. Quindi, in questo caso, stiamo valutando solo una dichiarazione, un più quadrato b. Quello sarà il valore di ritorno di default. Non fa mai male a mettere in restituire valori esplicitamente, soprattutto se hai a che fare con un funzione di logica molto complicato flusso. Ma non ne hanno bisogno. Così ora possiamo fare func 5, 1, e questo è fondamentalmente ciò che vi aspettereste. Qualcosa altro che possiamo fare, possiamo effettivamente fare func b uguale 1, a è uguale 5. Quindi, se specifichiamo che il numero qui, argomento che va a quale argomento nella funzione, siamo in grado di capovolgere in giro questi valori ovunque vogliamo. PUBBLICO: C'è una ragione scriverlo con la b pari anziché utilizzare solo i numeri e la virgola? CONNER HARRIS: Sì, di solito fare questo se si dispone di funzioni con un sacco di argomenti. Che potrebbe spesso essere come bandiere che si aveva solo desidera utilizzare in rare occasioni. E in questo modo è possibile only-- te può fare riferimento agli argomenti specifici che si desidera utilizzare valori non predefiniti per, e non c'è bisogno di scrivere un mazzo di bandiere uguale falso dopo di loro. O posso scrivere questo nuovo con un valore di default come b è uguale a 2. E poi ho potuto fare f func, Farò 4, 1 questa volta. E 17, che è 4 al quadrato più 1, come ci si potrebbe aspettare. Ma ho potuto anche solo chiamare questo con func 4, e prendo 18, perché Non specificare b. Così b ottiene il valore predefinito di 2. OK, ora, se siete in seguito insieme con la demo, digitare questa riga al tuo comando spingere e vedere cosa viene in su. A dire il vero, non farlo. Digitare questo. Si dovrebbe ottenere qualcosa di simile. Così mtcars è costruito nei dati fissato per questa dimostrazione finalità che viene with-- che viene in di default con la vostra distribuzione r. Si tratta di una raccolta di statistiche un tema 1974 della rivista Motor Trend su una serie di modelli diversi di auto. Quindi c'è miglia per gallone, cylinders-- Ho dimenticato come disp è-- cavalli. Probabilmente. Se hai appena automobili Google MT, poi uno dei primi risultati sarà dal documentazione ufficiale r e spiegherà tutti questi campi di dati. Così il peso è-- WT è peso della vettura in Ton. Q sec è il tempo di quarto di miglio. Così ora siamo in grado di fare alcune cose divertenti su macchine MT è un campo di dati. Così possiamo fare le cose come i nomi di fila, auto mt. E questo è un elenco di tutte le righe la serie di dati che sono nomi di automobili. Possiamo fare colnames, automobili mt questo. Se lo fai automobili mt, sottoindice-numerico, come 2. abbiamo la seconda colonna di questo, che sarebbe cilindri. PUBBLICO: Che cosa hai fatto? CONNER HARRIS: Ho digitato mt automobili, staffe e, che mi ha dato la seconda colonna di automobili mt. Oppure, se vogliamo una fila, posso digitare mtcars comma 2, per esempio. Altro turno 2 comma, del genere. E questo vale anche nella tua linea. Questo qui dà appena uno colonna, ma colonna come un vettore. Ho appena realizzato ora dimenticato di manifestare alcune cose interessanti su vettori che si può fare con gli indici. Così mi permetta di farlo adesso. Allora, facciamo c gets-- mettere questo su pause-- 2 volte 1 a 10. Quindi c è solo andare a essere il vettore da 2 a 20. Posso prendere elementi come questo, c2. Posso passare in un vettore in questo modo, mi lascia C-- usare il nome diverso da c, come vec c. Fondamentalmente, io sto facendo questo modo non si ottiene confuso tra c come funzione di costruzione del vettore, e poi c come un nome di variabile. Staffe Vec C 4, 5, 7. Questo farà di me il quarto, il quinto, e sette elementi dell'array. Posso fare vec, messo in un negativo indice, come negativo 4. Che tirarmi fuori questo con il quarto elemento rimosso. Poi se volevo fare fette, Posso fare vec da 2 a 6. 2 punti 6 è solo un altro vettore, che è 2, 3, 4, 5, 6. Sputa fuori quello. Quindi in ogni caso, di nuovo alle auto mt. Allora, facciamo alcune regressioni. Diciamo che il modello gets-- facciamo regress-- linearmente Non lo so. Prima di tutto faccio allegare mtcars, naturalmente. Così [incomprensibile] LM, cerchiamo di regredire miglia per gallone in peso tilde. E poi frame di dati è mtcars. Quindi il modello di sintesi. OK, quindi questo sembra un po 'complicato. Ma in fondo, visto che se cercare di esprimere miglia per gallone come funzione lineare di peso, poi abbiamo ottenuto questa linea qui, che intercetta a 37.28. 37.28 sarebbero le miglia teoriche per gallone di una macchina che pesa zero. E allora per ogni tonnellata supplementare, bussate circa cinque miglia per gallone fuori di questo. Entrambi questi coefficienti voi può vedere, gli errori standard lì. E sono molto statisticamente significante. Quindi possiamo essere molto sicuri di 1 e 10 al negativo 10. Quindi 1 volte qualcosa al negativo 10, che, se si effettua una macchina più pesante, avrà peggio miglia per gallone. Oppure possiamo provare qualche altro modello. Come invece di regredire questo su peso, cerchiamo di regredire sul registro di peso, perché forse il peso effettivo il chilometraggio non è in qualche modo lineare. Questo ci ha dato una r ^ di 0,7528. Così proviamo questo. Questa volta facciamo un diversa variabile, anche. Model2. Così sintesi, model2. Va bene, così ancora una volta, abbiamo ottenuto il nostro miglior linea di adattamento qui. E questo tempo-- questo sta dicendo, fondamentalmente, che ogni volta che si aumentare il peso di una macchina di un fattore e si perde questo molte miglia per gallone. E così questa volta il nostro standard residua errore it-- che non importa, davvero. L'errore standard residuo è fondamentalmente solo l'errore standard che avete lasciato dopo aver togliere la linea di tendenza. E il nostro r ^ qui è 0,81, che è un po 'meglio di quello che avevamo prima, 0,52. E così ora aggiungiamo una termine di questa regressione. Quindi cerchiamo di regredire miglia per gallone sia sul registro dei pesi e, facciamo, q miglia, quarto di miglio tempo. OK, deve avere the-- tutto bene, qsec. Qsec. Actually-- dispiace, che cosa? Fammi chiamare questo qualcosa altro oltre model2. Fammi chiamare questo model3. E così ora possiamo fare sintesi model3. E così ancora una volta, questo è fondamentalmente quello che ci si potrebbe aspettare. Hai intercettare positivo. L'efficace crescente peso è negativo. E l'effettiva aumentando il tempo di quarto di miglio è positivo, ma anche se meno di peso. Ora intuitivo, è possibile dare un senso questo dicendo pensare a macchine sportive. C'è una accelerazione molto veloce, brevissimi tempi quarto miglio. Stanno anche intenzione di utilizzare più gas, considerando che le auto più sensibili sono in corso di avere l'accelerazione più lento, maggiori tempi di miglio di trimestre, e utilizzare meno gas ,, così maggiori miglia per gallone. Grande. E così ora è il momento di tracciare una cosa del genere. Quindi cerchiamo di fare-- così nuda ossa possiamo fare plots-- perché ho attaccato questo frame di dati before-- possiamo semplicemente fare complotti, mpg in peso. Fanno di questo un po 'più grande. Lì, abbiamo praticamente abbiamo un scatter plot, ma i punti sono un po 'difficile da vedere su questo. Non mi ricordo quello che il offhand sintassi è per cambiare la trama. Quindi credo che questo sarà un buon momento per far apparire, c'è un bel aiuto incorporato caratteristica, help citazioni funzionano nome. Porteremo fino in fondo qualcosa che ti piacerebbe. Penso che in realtà fare questo tipo uguale p per punti trame. Ha fatto che cambia nulla? E no, non proprio. Tutto ok. Per qualche ragione, quando ho fatto questo sul mio computer qualche tempo fa, tutti i punti di dispersione erano molto più chiara. In ogni caso, sono il tipo di dispersione visibile? Ce n'è uno là. Alcuni lì, un po 'là. Potete sorta di vederli, giusto? Quindi, se vogliamo aggiungere una retta di regressione a tale grafico, qui, che è un po 'spoglia bones-- vorrei che fosse un po 'più bello. È uguale principale contro il peso. Miglia per gallone. Anche in questo caso, si può vedere quanto sia utile argomenti opzionali sono qui con anche Non dover mettere le cose in un certo ordine con argomenti di tastiera quando si dispone di complotti, perchè questi prendono un sacco di argomenti. Xlab uguale peso, peso, tonnellate. Tutto ok. OK, sì, questo dispositivo è essere un po 'fastidioso. Ma si può vedere una sorta di lassù, c'è un titolo grafico sul lato. Qui there's-- sul fondo qui ci sono le etichette degli assi. Non mi ricordo estemporaneo ciò che i comandi ars-- quali le funzioni per aumentare le dimensioni di quelle etichette e titoli, ma sono lì. E così, se vogliamo aggiungere la retta di regressione, potremmo fare qualcosa like-- I avere la sintassi scritto qui. Quindi ricordate che basta aggiungere il modello era mpg, peso, mtcars. E così, se ho voluto aggiungere una misura migliore linea, ho potuto fare un modello riga b. E boom, abbiamo un migliore curva di adattamento. È un po 'difficile da vedere di nuovo. Sono abbastanza dispiaciuto per il difficoltà tecnologiche. Ma funziona fondamentalmente in alto a sinistra in basso a destra. E se la scala fosse più grande, si poteva vedere che l'intercetta è quello che si può trovare dalle statistiche riassuntive se si digita il modello di sintesi. Ok, quindi spero che tutti si una sorta di senso di ciò che R è, ciò che è buono per. Si potrebbe fare trame di gran lunga più bello di questo sul proprio tempo, se volete. Così la funzione di interfaccia straniera. Questo è qualcosa che non è in genere coperto di lezioni introduttive o qualcosa introduttivo per r. Non è probabile che si sta andando a bisogno. Tuttavia, ho trovato utile in i miei progetti in passato. E non c'è nulla di buono tutorial per online. Così sto solo andando a tutti voi correre attraverso questo e poi sei libero di andarsene. E così l'estero interfaccia funzione è ciò che è possibile utilizzare per chiamare a vedere funzioni con un R. Internamente, R è costruita su aritmetica di C. R è solo Aritmetica in virgola mobile di C a 64-bit, che è di tipo double [incomprensibile]. E si potrebbe desiderare di fare questo per una serie di ragioni. Per uno, R è interpretato, è Non compilato al codice macchina. Così si può riscrivere il vostro cicli interni in C e quindi ottenere il vantaggio di utilizzare R. Come è un po 'più conveniente di C. Ha migliore grafica strutture e quant'altro. E pur essendo in grado di ottenere velocità massima dai passanti interni, che è dove si ha realmente bisogno. Riusare librerie C esistenti, che è anche importante. Se avete qualche libreria C per come, Non lo so, trasformate di Fourier, o alcuni molto Archeano Procedura statistiche usato in alto astrofisica energia o qualcosa del genere, non lo so. Astrofisica delle alte energie non è nemmeno un think, credo. Ma si può fare che invece di avere a dare una porta nativa R di loro. E su the-- e ancora una volta, come se si guardare nella maggior parte delle librerie predefinite di R, su gli interni, gli interni sono intenzione di utilizzare la funzione di straniero interfaccia molto ampiamente. Avranno le cose come Fourier trasforma o di calcolo di correlazione coefficienti scritte in C, e faranno appena hanno wrapper R intorno a loro. L'interfaccia è un po 'difficile. credo la sua difficoltà è esagerato in un molte delle istruzioni che troverete. Ma comunque, è un po 'di confusione. E non sono stato in grado di trovare un buon tutorial per esso, quindi questo è adesso. Ancora una volta, questo intero segmento è più per riferimento futuro. Non preoccuparti per la copia tutto giù in questo momento. Quindi le seguenti istruzioni sono per sistemi Unix-like, Linux, BSD, OS X. Non lo so come funziona su Windows, ma per favore basta non fare il tuo progetto definitivo su Windows. Davvero non si vuole. Unix è molto meglio insieme up per la programmazione casuale. Quindi, in sostanza straniera funzione di interfaccia. Se volete scrivere un C funzione per l'uso con R, deve prendere tutte le argomenti come puntatori. Così per valori singoli, questo significa che è puntato al valore. Per array, questo è un puntatore al primo elemento, che è quello che i nomi di matrice realmente significano. Ancora una volta, questo è qualcosa che si dovrebbe avere piuttosto totalmente giù dopo p set five. Nomi di array sono solo puntatori al primo elemento, Il tipo in virgola mobile è doppia. E la tua funzione deve restituire void. L'unico modo che possa effettivamente dire R cosa è successo è modificando la memoria che R ha dato ad esso attraverso la funzione estere interfaccia. Così ho scritto questo esempio qui, questa è una funzione che calcola uso dot prodotto di due vettori. Richiede due argomenti, vec1, vec2, che sono i vettori stessi, e poi n, che è un lunghezza, perché ancora una volta, R ha costruito in [incomprensibile] per scoprirlo la lunghezza di vettori, ma C no. In C, i vettori è un arbitrario pezzo delimitato della memoria. Quindi il modo è possibile calcolare prodotto scalare è solo impostare questo parametro di a zero e poi scorrere da 1 a stella n, perché n è un puntatore alla lunghezza, basta aggiungere qualcosa a questo fuori parametro. E può essere buona pratica se avete intenzione di fare questo per scrivere due funzioni C separati. Uno di loro has-- Uno di loro solo prende gli argomenti e le tipologie che sarebbero di norma in C. Quindi ci vuole una matrice argomenti come puntatori. Ma gli argomenti singolo valore come n, ci vuole solo come valori da copiare, senza puntatori. E poi non lo fa [Incomprensibile] fuori puntatore. E allora si può avere un diverso, sostanzialmente, funzione wrapper che in fondo gestisce i requisiti della funzione estera Interfaccia per voi. Il modo in cui si chiama questo in R è, una volta avete la vostra funzione scritto in C, si digita R shlib cmd, R comando di libreria condivisa, foo punto c, o qualsiasi altra cosa il nome del file è, e il sistema operativo non shell nel terminale R. E questo creerà un libreria chiamata foo dot così. E poi si può caricare in il nostro script o interattivamente con comando load din punto. Poi vi è una funzione in R chiamato dot c. Questo richiede argomenti che sono prima il nome della funzione in C che si desidera chiamare. E poi tutti i parametri a tale funzione, devono essere nell'ordine corretto. Devi usare questo tipo funzioni di coercizione come intero, come doppio, come carattere, e logico. E poi, quando ritorna la lista, che è di nuovo solo una matrice associata del nomi dei parametri e valori dopo la funzione è stato eseguito. Quindi, in questo caso, perché prod puntino ha argomenti vec1, vec2, e int n, n out. Per dot c abbiamo prod puntino, il nome della funzione stiamo chiamando, vec1, vec2, tipo coerce. La lunghezza di entrambi vettoriale, Ho appena scelto vec1 arbitrariamente. Sarebbe più robusto per dire s min Lunghezza intero di vec1, lunghezza vec2. Poi, proprio come doppio zero, perché non lo facciamo davvero cura ciò che accade nella fuori parametro perché siamo impostandolo a zero comunque. E poi i risultati stanno per essere un grande gamma associato di fondo vec1 è qualunque cosa, vec2 è tutto ciò. Ma siamo interessati a fuori, così possiamo ottenere che fuori. Anche questo è un esempio giocattolo molto di un'interfaccia funzione estere. Ma se avete calcolare puntino prodotti di vettori di massa in loop, o se si deve fare qualcos'altro in un ciclo, e non si vuole fare affidamento su R, che ha un po 'di overhead incorporato, questo può essere utile. Ancora una volta, questo non è solitamente un argomento introduttivo a R. Non è molto ben documentato. Sto solo includerlo perché L'ho trovato utile in passato. Pratiche Quindi, le cattive. Ho detto che ci sia una ciclo for nella funzione. Generalmente non si dovrebbe, in il linguaggio, lo usa. Sulla base di quanto R implementa iterazione internamente, può essere lenta. Hanno appena anche guardare brutto. R gestisce vettori molto bene, così spesso non c'è bisogno di usarlo. Poi si può di solito sostituire un vettore spesso con queste funzioni chiamate alto funzioni di ordine, Mappa, Ridurre, Trova o filtro. Mi limiterò a dare un po ' esempi di ciò che essi fanno. Map è una funzione di ordine superiore perché prende una funzione come argomento. Così si può dare una funzione, si può dare un array, e si applica la funzione ad ogni elemento dell'array e restituire il nuovo array. Ridurre, in pratica si dà è un array, si dà una funzione che prende due argomenti. Si applicherà la prima funzione, la primo argomento con un certo valore di avviamento. Poi a questo risultato nel secondo. Poi a questo risultato nel terzo, quindi a questo risultato nel quarto. E poi tornare quando si arriva alla fine. Così, per esempio, se si desidera calcolare la somma di tutti gli elementi in una matrice, che si potrebbe chiamare ridurre con [incomprensibile] ridurre un'aggiunta funzione, come func a, b, restituire a più b. E quindi avviare un valore pari a 0. E tutto questo, si possono trovare descritti nella documentazione R, in qualsiasi libro di testo su programmazione funzionale. C'è anche questa classe di funzioni chiamate si applicano funzioni, che ho don't-- sono un po 'difficile da spiegare, ma se si guarda in [incomprensibile] prenotato che ho citato all'inizio, egli li spiega abbastanza bene in la sua appendice sulla programmazione R. Più su pratiche, aggiungendo a vettori. Sì? Penso che dovrei correggere questo. In quella prima linea, la freccia vec, che la freccia non dovrebbe essere lì. È possibile assegnare a un vettore, ancora una volta, per prendere la sua lunghezza più 1 e l'assegnazione di un valore a questo. Che si estenderà il vettore, o se si può fare Uguale Vec C, newValue vec. Anche in questo caso, se si utilizza C con un argomento come un vettore, la gerarchia risultante viene appiattito. Quindi ti basta avere un vettore che è prorogato di 1. Non farlo mai. Il motivo per cui si non dovrebbe fare questo è presente. Quando si assegna un vettore, è dà un certo pezzo di memoria. Se si aumenta quella dimensione vettore, deve ridistribuire il vettore altrove. E così riallocazione è piuttosto costoso. Non voglio entrare nei dettagli di come ripartitori di memoria sono implementati sul livello di sistema operativo, ma ci vuole molto tempo per trovare un nuovo pezzo di memoria. E anche, se siete ri-assegnazione lotti e lotti di progressivamente più grandi pezzi, si finisce con qualcosa chiamato la frammentazione di memoria, dove la memoria disponibile è diviso in tanti piccoli blocchi nel punto di vista allocatori memoria. E diventa sempre più difficile per trovare la memoria per altre cose. Così, invece, se avete bisogno di fare questo, se è necessario per crescere un vettore da un capo al successivo, invece di aggiungere ad essa costantemente, si dovrebbe pre-allocare. Freccia vec, lunghezza del vettore pari a 1.000, o qualsiasi altra cosa. E allora si può solo assegnare per valori uno del vettore una volta dopo aver assegnato una volta. Mi sono imbattuto in questo, ancora una volta, il mio lavoro estivo quando stavo scrivendo differenziale NRA risolutore di equazioni. Non simbolica numerica. L'idea è che una volta che hai un valore per la soluzione, che si utilizza per calcolare il prossimo. Quindi il mio naturale ingenuo inclinazione era per dire OK, quindi inizierò con un vettore che è un valore sostanziale. Calcola da che il valore successivo che va sul mio soluzione vettore, e aggiungere che. Creare qualcosa di diverso, aggiungere che. E 'andata molto, molto lentamente. E una volta ho capito che questo e ho cambiato il mio sistema da aggiungendo a questo vettore come 10.000 a 100.000 volte, ad appena pre-assegnazione di un vettore e solo in esecuzione con quello. Ho avuto più di 1.000 volte la velocità in su. Quindi questo è un molto comune trappola per la programmazione R. Se avete bisogno di costruire un vettore pezzo per pezzo, pre-allocare esso. Un altro viaggio comune up-- questo è il mio ultimo diapositiva, non problema, la funzione è la gestione degli errori. R, ad essere sinceri, non fa davvero fare molto bene. Ci sono molti problemi che possono sorgere. Ad esempio, se si ottiene una matrice o un vettore di una funzione che ti aspettavi un singolo valore provenga da, o viceversa, e che si passa in una funzione che hai scritto in attesa di un singolo valore, che può essere un problema. Alcune funzioni restituire null come fanno, per esempio, lettura da un chiave inesistente in un elenco. Ma nullo non è come C dove se si tenta di leggere da un vecchio puntatore, [incomprensibile] null pointer, solo seg difetti e se siete nel vostro debugger esso ti dice esattamente dove ti trovi. Invece, nulla sarà fare-- funzioni farà cose imprevedibili se sono nulli handed. Come se stai consegnato nullo max, ti do infinito negativo. E così, sì. E così questo è accaduto a me una volta quando ho avuto cambiato un sacco di campi nella mia struttura lista una volta senza cambiare altrove quando leggevo da loro. E poi ho avuto ogni sorta di casuale risultati infinity saltar fuori e non ho idea di dove sono venuti. E purtroppo, non c'è nessuna vera modalità rigorosa R dove si può dire se qualcosa sembra che potrebbe essere un errore, basta fermarsi lì così posso essere disciplinato e rimediare. Tuttavia, c'è qualcosa chiamato arresto se non. Ciò equivale ad affermare di C, se hai parlato di questo. Non credo C affermare è un argomento conferenza, ma il vostro capo sezione potrebbe essere andato su di esso. E smettere se non prende in pratica qualsiasi predicato, in modo che qualsiasi affermazione che può essere vero o falso. E se è falso, si ferma il suo programma. Ci dice esattamente quello che la linea erano su e quali condizioni fallito. E questo molto utile, per esempio, controllo sanità mentale, gli ingressi di funzione. Quindi, se avete una funzione e ci si aspetta, ad esempio, se mi si dovrebbe dare una data, voglio le date essere solo un vettore di lunghezza 1 e da qualche parte tra 1 e 31. E se no, lo so qualcosa è andato storto. E ho scelto di fermarsi qui prima di questa ha bussare a caso sugli effetti con il codice che è più difficile tracciare attraverso. Ecco, questo è uno dei possibili utilizzare per l'arresto in caso contrario. Comunque, OK. Ecco, questo è il fine. Grazie mille per essere venuti. Io sono un dilettante in questo. Mi dispiace tanto, se siete annoiati o confuso o quello che hai. Sono felice di rispondere alle domande via e-mail a connorharris@college.harvard.edu. Questo vale anche per tutti i gusti guardare questo vivere o in seguito. Inoltre, anche se non sono un TF, sono anche molto disposti a servire come un non ufficiale consulente per chiunque sia R utilizzando in un progetto finale. Se si desidera che, poi basta parlare con il vostro TF e poi scrivimi una mail così So cosa si sta lavorando e così posso impostare incontro volte con voi se volete. Quindi, di nuovo, vi ringrazio molto. Spero che ti sia piaciuto. PUBBLICO: [incomprensibile]. CONNER HARRIS: Certo. PUBBLICO: Che tipo di progetto sarebbe uno studente di CS utilizzare R per? CONNER HARRIS: Quindi, se non sei fare qualcosa che è esclusivamente in data mining, per esempio, e non vi sono un sacco di cose si potrebbe fare con quella con i dati estrazione e machine learning. Si potrebbe desiderare di utilizzare R per un componente di qualcosa. Ho portato su, in origine, l'esempio di se si sta scrivendo un sito web e si desidera eseguire automatizzato analisi statistica del server i log in un certo tempo ogni giorno, che potrebbe essere qualcosa che è molto facile da fare in solo una breve Script in R che è possibile pianificare per eseguire ogni notte, per esempio. E sono sicuro che, se non c'è alcuna ragione che ci si vogliono statistiche o capacità grafiche e hanno questo percorso automaticamente invece di dover interagire con le cose in Excel, per esempio, è già qualcosa si potrebbe desiderare di utilizzare R per. Quindi altre domande prima di partire? No? D'accordo, beh, ancora una volta, grazie molto per la venuta.