[MUSIC JOC] DUSTIN TRAN: Bună. Numele meu este Dustin. Deci, voi prezenta Analiza datelor în R. Doar un pic despre mine. Eu sunt în prezent un student absolvent in Inginerie și Științe Aplicate. Studiez o intersecție de învățare și statistici mașină astfel Analiza datelor din R este într-adevăr fundamental la ceea ce Fac pe o bază de zi cu zi. Și R este ales bun pentru analiza datelor pentru că este foarte bine pentru realizarea de prototipuri. Și, de obicei, când faci un fel de analiză a datelor, o mulțime de probleme sunt de gând să cognitive. Și așa vrei doar să aibă un limbaj foarte bine că este doar bun pentru a face funcții predefinite, spre deosebire a avea de a face cu lucruri de nivel scăzut. Deci, la început, Mă duc de a introduce ceea ce este R, de ce ar fi doriți să-l folosească, și apoi trece peste unele în demo, și du-te de acolo. Deci, ce este R? R este doar un limbaj dezvoltat pentru calcul statistic și vizualizare. Deci, ce înseamnă acest lucru este că este un limbaj foarte excelent pentru orice fel de lucru care se ocupă cu incertitudine sau de vizualizare a datelor. Deci, ai toate astea distribuții de probabilitate. Nu vor fi built-in functii. Veți avea, de asemenea, excelent complot pachete. Python este un alt concurent limbaj de date. Și un lucru pe care mi se pare că R este mult mai bine la vizualizare este. Deci, ceea ce veți vedea în demo ca bine este doar un limbaj foarte intuitiv care pur și simplu funcționează extrem de bine. De asemenea, este gratuit și open source, cum este orice altă limbă bun cred. Și aici, o grămadă de doar cuvinte cheie aruncat la tine. E dinamic, ceea ce înseamnă dacă aveți o anumit tip atribuită unui obiect decât că va schimba doar pe zbor. E leneș așa că e deștept despre cum se face calcule. Funcțional însemnând poate funcționa într-adevăr bazat pe funcțiilor așa anything-- orice fel de manipulare ești face, se va baza pe funcții. Operatorii Deci binare, de exemplu, sunt funcții doar inerent. Și tot ceea ce ai de gând să faci este O să fi rulat de pe funcții de sine. Și apoi obiect orientat, de asemenea. Deci, aici este un complot xkcd. Nu numai pentru că mă simt ca și cum Xkcd este fundamental pentru orice fel de prezentare, ci pentru că Mă simt ca și cum acest lucru într-adevăr Ciocane la punctul în care o mulțime de moment în care faci un fel de date analiză, problema nu este atât de mult cât de repede se execută, dar cât de mult se va luați la programa sarcina. Deci, aici este doar analizează dacă strategie a sau b este mai eficient. Acest lucru va fi ceva ca esti O să se ocupe foarte mult de la un fel de limbaje de nivel scăzut în cazul în care ai de a face cu defecte SEG, alocare de memorie, initializations, chiar făcând funcțiile built-in. Și chestia asta este tot manipulat foarte, foarte elegant în R. Deci, doar pentru a ciocan acest punct, cel mai mare blocaj va fi cognitive. Deci, analiza datelor este o problemă foarte greu. Fie că faci masina de învățare sau esti faci doar un fel de explorare a datelor de bază, nu vrei să aibă pentru a lua un document și apoi compila ceva de fiecare dată când doriți să vedeți ce o coloană arată, ceea ce intrările special într-o matrice arată. Deci, vrei doar să aibă unele interfețe foarte frumos puteți rula o funcție simplă că indicii de orice doriți și doar rulați de acolo. Și ai nevoie de domeniu anumite limbi pentru asta. Și R va ajuta cu adevarat sa definesc problemă și de a rezolva o în acest mod. Deci, aici este o programare arată complot popularitate din R cum a dispărut în timp. Deci, după cum puteți vedea, cum ar fi 2013 sau așa că doar cu sufletul la gură în sus enorm. Și acest lucru a fost doar din cauza asta tendință imens în industria de tehnologie Date despre mari. De asemenea, nu doar tehnologia industrie, dar de fapt orice that-- industrie, deoarece o mulțime de industriile sunt un fel de fundamentale pentru încearcă să rezolve aceste probleme. Și, de obicei, puteți avea ceva bun modalitate de măsurare a acestor probleme sau chiar să le definire sau rezolvarea acestora folosind date. Deci, cred că chiar acum R este a 11-a Cele mai populare limbă pe TIOBE și a fost în creștere de atunci. Deci, aici e ceva mai mult caracteristici ale R. Are un număr enorm de pachete pentru toate aceste lucruri diferite. Deci orice moment aveți un anumite probleme, cele mai multe timp R va avea această funcție pentru tine. Deci, dacă doriți să construi un fel de mașină algoritm de învățare numit Aleatorie Forest sau Arbori de decizie, sau chiar încearcă să ia media de o funcție sau la oricare dintre aceste lucruri, R va avea asta. Și dacă nu-i pasă de optimizare, un lucru care este comun se că după ce ați terminat de prototipuri un fel de limbaj de nivel înalt, va arunca că in-- doar veți port care peste la un limbaj de nivel scăzut. Ce e bun despre R este că, odată ce ești făcut prototipuri se, puteți rula C ++, sau Fortran, sau oricare dintre acestea cele de nivel inferior direct în R. Deci, asta e un adevărat facilitate rece despre R, dacă îți pasă cu adevărat despre punctul de optimizare. Și este, de asemenea, foarte bun pentru vizualizare web. Deci D3.js, de exemplu, este Cred că un alt seminar că am prezentat astăzi. Și acest lucru este cu adevărat minunat pentru face vizualizări interactive. Și D3.js presupune că aveți un fel de date care urmează să fie reprezentate grafic și R este o modalitate foarte bună de a fi în stare să facă analiza datelor înainte să-l exportați pe la D3.js sau chiar doar rulați D3.js comenzi în R sine, precum și toate acestea alte biblioteci de asemenea. Așa că a fost doar introducerea ceea ce este R și de ce s-ar putea folosi. Așa sperăm, am ai convins ceva despre doar încercarea de a vedea cum este. Așa că am de gând să merg mai departe și trece prin unele fundamentale despre obiecte R și ce poți să faci cu adevărat. Deci, aici este doar o grămadă de comenzi de matematica. Deci, spune you're-- vrei să construiești limbă-te și tu vrei doar pentru a avea o grămadă de diferite instrumente. Orice fel de operație voi că vei vreau este destul de mult va fi în R. Deci, aici este 2 plus 2. Aici este de 2 ori pi. R are o grămadă de constante built-in pe care le veți folosi frecvent ca pi, e. Și apoi, aici e 7 plus runif, așa runif de 1. Aceasta este o funcție care este generează o uniformă aleator la 0 la 1. Și apoi există 3 la puterea de 4. E rădăcini pătrate. Nu e jurnal. Deci, log va face de bază exponențială de la sine. Și apoi, dacă specificați o bază, atunci poti sa faci ce vrei de bază. Și apoi aici sunt câteva alte comenzi. Deci ai 23 mod 2. Apoi, aveți restul. Apoi, aveți științific notația dacă, de asemenea, vreau să fac doar mai mult și lucruri mai complicate. Deci, aici este cesiune. Deci, misiuni tipice în R se face cu o săgeată așa că este mai puțin decât și apoi cratima. Deci, aici eu sunt doar atribuire 3 la Val variabilă. Și apoi am imprimarea val și apoi imprimă trei. În mod implicit în R interpret, ea va imprima lucrurile pentru tine astfel încât să nu trebuie să specificați imprima un val orice moment doriți să imprimați ceva. Puteți face doar val și atunci va face asta pentru tine. De asemenea, puteți utiliza egali punct de vedere tehnic ca un operator de atribuire. Nu sunt ușoare subtilitățile între folosind săgeata Operatorul și egal Operatorul de misiuni. Cea mai mare parte prin convenție, toată lumea va folosi doar operatorul de săgeată. Și aici, eu atribuirea acest notație oblic numit un colon 6. Aceasta generează un vector la 1 la 6. Și asta într-adevăr frumos, pentru că atunci alocați doar vectorul de val și care funcționează de la sine. Deci, acest lucru este deja merge de la o single-- o date foarte intuitiv Structura de doar un dublu de un anumit tip de tip într-un vector și care va colecta toate valorile scalare pentru tine. Deci, după ce la scalar, voi au obiecte R și acesta este un vector. Un vector este nici un fel de colecție de același tip. Deci, aici sunt o grămadă de vectori. Deci, aceasta este numeric. Numeric este modul R de a spune dublu. Și astfel în mod implicit, orice Numărul va fi un dublu. Deci, dacă aveți c de 1,1, 3, negativ 5.7, c este o funcție. Acest lucru concateneaza toate trei numere într-un vector. Și acest lucru va be-- deci, dacă observați 3 de la sine, în mod normal, v-ar asuma că acest lucru este ca un întreg, ci pentru că toți vectorii sunt de același tip, aceasta este un vector de dublu sau numeric în acest caz. rnorm este o funcție care generează variables-- normală standard de sau valori normale standard. Și eu precizând două dintre ele. Așa că fac rnorm 2, alocarea că, pentru a devs, iar apoi am imprimarea devs. Deci, acestea sunt doar două Valorile normale aleatoare. Și apoi Ints dacă faci îți pasă de numere întregi. Deci, aceasta este doar despre memorie alocare și salvarea dimensiunea memoriei. Deci, va trebui să adăugați numerele de capital L. In general, aceasta este Notație istoric R lui pentru ceva numit întreg lung. Astfel, cele mai multe ori, veți fie se ocupă cu camere duble. Și dacă va fi vreodată mai târziu pe optimiza codul dvs., puteți adăuga doar aceste L's ulterior sau în timpul acesta daca esti ca precognitivă despre ceea ce ai de gând să faci aceste variabile. Deci, aici este un vector de caractere. Deci, din nou, eu concatenarea trei șiruri de data asta. Observați că siruri de caractere duble și siruri de caractere unice sunt aceleași în R. Deci, am arthur și lui Marvin și așa când am o imprimarea, toate acestea sunt de gând să arate siruri duble. Și, dacă doriți să includă șirul dublu sau single în personajele tale, atunci puteți fie alternativ siruri de caractere tale. Deci, Marvin pentru al doilea element, acesta este O să vă show-- Trebuie doar siruri de caractere dublu și apoi un singur șir deci acest lucru este alternativ. În caz contrar, dacă doriți să utilizați un dublu Operatorul șir într-un șir dublu atunci când se declară, atunci utilizați doar operatorul de evacuare. Deci, ce faci dublu șir backslash. Și, în sfârșit, avem, de asemenea au vectori logice. Deci, logical-- atât de adevărat și FALSE, și sunt Va fi cu majuscule. Și apoi, din nou, eu concatenarea ei și apoi le atribuirea de bools. Deci bools se va arăta tu TRUE, FALSE, TRUE și. Deci, aici este indexare vectorized. Deci, la început, am Iau un function-- aceasta se numește o sequence-- secvență între 2 și 12. Și eu iau o secvență de 2. Deci va face 2, 4, 6, 8, 10 și 12. Și apoi, eu sunt indexare pentru a obține al treilea element. Deci, un singur lucru de a păstra în minte este că R indexurile pornind de la 1. Deci, Vals 3 este de gând să dea tu al treilea element. Aceasta este un fel de diferit de alte Limbi în cazul în care începe de la zero. Deci, în C sau C ++, de exemplu, ești mergi la a lua al patrulea element. Și aici este vals 3-5. Deci, un lucru care este foarte cool este că poate genera variabile temporare interior și apoi doar le folosesc pe zbor. Deci, aici este 3-5. Așa că generarea unui vector 3, 4, și 5 și apoi Mă indexarea pentru a obține a treia, Elemente al patrulea, al cincilea și. Deci în mod similar, puteți abstract asta doar face orice fel de vector care vă oferă indexare. Deci, aici este vals și apoi Elemente în primul rând, al treilea, și al șaselea. Și apoi, dacă vrei pentru a face o completare, astfel încât să faci doar minus după aceea și că va vă dau tot ce nu-i în primul rând, al treilea, al șaselea element de ori. Deci, acest lucru va fi de 4, 8, și 10. Și dacă doriți să obțineți chiar mai avansate, puteți înlănțui vectori booleene. Deci, acest indice este de gând să vă dau acest vector de lungime Boolean 6. Deci, rep virgulă TRUE 3. Acest lucru se va repeta TRUE trei ori. Deci, acest lucru vă va oferi o vector TRUE, TRUE, TRUE. Rep FALSE 4-- acest lucru se întâmplă pentru a vă oferi un vector de FALSE, FALSE, FALSE, FALSE. Și, apoi c se va înlănțui aceste două Booleans împreună. Deci, ai de gând să obțineți trei TRUEs și apoi patru FALSEs. Așa că, atunci când Vals index, ești mergi la a lua TRUE, TRUE, adevărat. Așa că o să spun da, Vreau cele trei elemente. Și apoi FALSE, FALSE, FALSE, FALSE se întâmplă să spun nu, nu vreau acele elemente așa că nu o să le restituie. Și cred că e de fapt o greșeală de scriere aici deoarece acest spune repeta TRUE 3 și se repetă FALSE 4, și punct de vedere tehnic, tu doar au șase elemente atât de repete FALSE, ar trebui să fie repetată FALSE 3. Cred că R este, de asemenea, destul de astfel de inteligent că dacă tocmai specificați 4 aici, atunci aceasta nu va mai erorii. Acesta vă va oferi doar această valoare. Deci va ignora pur și simplu că al patrulea FALSE. Deci, aici este cesiune vectorized. Deci, set.seed-- acest stabileste doar semințe de numere pseudoaleatoare. Așa că setarea sămânța de 42, ceea ce înseamnă că dacă am genera trei aleatorie valori, iar apoi, dacă rula set.seed pe cont propriu calculator folosind aceeași valoare 42, atunci veți primi, de asemenea, aceleași trei normale aleatorii. Deci, acest lucru este foarte bun pentru reproductibilitate. De obicei, când faci ceva tip de analiză științifică, ce-ar vrea să setați semințele. În acest fel alti oameni de stiinta pot doar reproduce același cod exact ai făcut pentru că vor avea exact variabile aleatoare aceleași that-- sau aleatoare Valorile pe care le-ați luat, de asemenea. Și astfel atribuirea vectorized aici dă dovadă de Vals 1 la 2. Deci, este nevoie de primele două elemente de Vals și apoi le atribuie la 0. Și apoi, puteți de asemenea, doar face lucru similar cu Booleans. Deci, Vals nu este egal cu 0-- această voință vă dau un FALSE vector, FALSE, TRUE în acest caz. Și apoi, o să spună orice din aceste indici care au fost TRUE, apoi se va atribui care la 5. Deci, este nevoie de al treilea element aici și apoi atribuie 5. Și acest lucru este foarte frumos comparativ cu limbaje de nivel scăzut în cazul în care va trebui să utilizați pentru bucle pentru a face toate aceste lucruri vectorized pentru că e doar foarte intuitiv și este un singur-linie. Și ce e vorba mare notație vectorized este că în R, acestea sunt un fel de built-in, astfel încât acestea sunt aproape la fel de repede ca face într-un limbaj de nivel scăzut ca spre deosebire de a face o buclă de la R și apoi au să facă indexarea dinamic în sine. Și care va fi mai lentă decât a face acest tip de lucru vectorized în cazul în care se poate face acest lucru în paralel, în cazul în care o face în filetare practic. Deci, aici este vectorizate operațiuni. Deci, eu sunt generatoare de o valoare la 1 la 3, atribuirea că la vec1, 3 la 5, vec2, adăugându-le împreună. Le adaugă componente înțelept așa e 1 plus 3, 2 plus 4, și așa mai departe. vec1 ori vec2. Aceasta multiplică două Valori component înțelept. Deci, este o ori de 3, de 2 ori 4, și apoi de 3 ori 5. Și apoi, în mod similar, puteți face, de asemenea, comparisons-- comparații logice. Deci e FALS FALS ADEVARAT în acest caz pentru că 1 nu este mai mare de 3, 2 nu este mai mare de 4. Aceasta este, cred, un alt greșeli, 3 este cu siguranță nu mai mare de 5. Da. Și astfel încât să puteți face doar tot aceste operațiuni simple deoarece moștenit lor din clasele înșiși. Așa că a fost doar vectorul. Și asta e un fel de cele mai fundamentale R obiect deoarece dat un vector, puteți construi obiecte mai avansate. Deci, aici e un matrice. Aceasta este, în esență, de captare de ce o matrice este ea însăși. Deci, în acest caz, este trei diferit vectori, în cazul în care fiecare este o coloană, sau puteți lua în considerare ca fiecare dintre ele este un rând. Așa că stocarea o matrice de la 1 la 9 și apoi mă specificarea 3 rânduri. Deci 1-9 vă va oferi un vector de 1, 2, 3, 4, 5, 6, și tot drumul până la 9. Un lucru de a păstra, de asemenea, în minte este că Magazine R valori în format coloane majore. Deci, cu alte cuvinte, atunci când vezi 1 9, se va stoca them-- se va fi 1, 2, 3 în prima coloană, și apoi o va face 4, 5, 6 în a doua coloană, și apoi 7, 8, 9 în coloana a treia. Și aici sunt alte funcții comune care le puteți utiliza. Deci mat dim, acest lucru vă va oferi dimensiunile matricei. O să vă întoarceți un vector de dimensiune. Deci, în acest caz, deoarece matricea noastra este 3 cu 3, se gând să vă dau un vector numeric e 3 3. Și aici este doar arată multiplicare matrice. Deci, de obicei, daca doar faci asterisk-- astfel mat asterisc mat-- acest lucru se întâmplă pentru a fi operație pentru componente înțelept sau ceea ce se numește produsul Hadamard. Deci va face fiecare componentă-înțelept elemente. Cu toate acestea, dacă doriți multiplication-- matrice astfel înmulțirea primele ori rând prima coloană a doua matrice de și așa on-- v-ar folosi această operațiune la sută. Și t de mat este doar un operație pentru transpune. Așa că spun iau transpusa în matricea, se multiplica prin matricea în sine. Și apoi o să întoarce la voi un alt 3 de 3 matrice care arată produsul pe care vrea. Și astfel că a fost matrice. Aici este ceea ce se numește un cadru de date. Un cadru de date vă puteți gândi ca o matrice, dar fiecare coloană sine va fi de un tip diferit. Deci, ce este foarte misto despre date rame este că în analiza datelor sine, ai de gând să aibă toate aceste date eterogene și toate acestea într-adevăr lucruri murdar în care fiecare din coloanele înșiși pot fi de diferite tipuri. Deci, aici vreau să spun crea o cadru de date, face int la 1 la 3, și apoi au, de asemenea, un vector de caractere. Așa că am putea indexa prin fiecare dintre aceste coloane și apoi voi primi valorile în sine. Și puteți face, de asemenea, un fel de operațiuni pe cadre de date. Și cele mai multe ori atunci când sunteți face analize de date sau un fel de preprocesare, vei putea de lucru cu aceste structuri de date în cazul în care fiecare coloană se întâmplă a fi de un tip diferit. În cele din urmă, astfel încât acestea sunt, în esență, doar cele patru obiecte esențiale în lista R. va colecta orice fel alte obiecte doriți. Deci va stoca aceasta într-o singură variabilă pe care le puteți accesa cu ușurință. Deci, aici, eu iau o listă. Spun lucruri egal 3. Așa că am de gând să aibă un element în lista, iar aceasta se numește chestia asta, și că va avea valoarea 3. Pot crea, de asemenea, o matrice. Deci, aceasta este de la 1 la 4 și scop rând este egal cu 2, deci o 2 de 2 matrice. De asemenea, în listă și se numește mat. moreStuff, un șir de caractere, și chiar o altă listă în sine. Deci, aceasta este o listă care este 5 și urs. Deci are valoarea de 5 și IT are ursul șir de caractere și este o listă în interiorul-o listă. Astfel încât să puteți avea aceste lucruri recursive unde aveți another-- o tastați în tipul. Deci în mod similar, puteți avea o matrice într-o altă matrice și așa mai departe. Și o listă este doar o modalitate buna de colectare și agregare toate aceste obiecte diferite. Și, în sfârșit, aici este doar ajutor în cazul în care acest lucru a fost doar trecut peste foarte repede. Deci, oricând ești confuz despre un fel de funcție, puteți face ajutorul acestei funcții. Deci, poți să faci de ajutor matrice sau o matrice semn de întrebare. Și ajutor și semnul de întrebare sunt doar prescurtare pentru același lucru astfel încât acestea sunt pseudonime. lm este o funcție care doar nu un model liniar. Dar dacă doar ai nici o idee cum că lucrări, puteți face doar ajutorul LM și că voi da niște un fel de documente care Se pare ca un fel de Pagina om în Unix, în cazul în care aveți o scurtă descriere a ceea ce face, de asemenea, ceea ce argumentele sale sunt, ce se întoarce, și la doar sfaturi cu privire la modul în care să-l folosească, și câteva exemple de asemenea. Așa că lasă-mă să merg mai departe și spectacol unele demo de utilizare a R. OK. Așa că m-am dus peste foarte rapid doar datele Structuri și un fel de op-- unele dintre operațiunile. Iată unele funcții. Deci, aici Mă duc pentru a defini o funcție. Deci, eu sunt, de asemenea, cu ajutorul Operatorul de atribuire aici, și apoi vreau să spun declare ca o funcție. Și este nevoie de valoarea x. Deci, aceasta este orice valoare doriti și am de gând să se întoarcă x sine. Deci, aceasta este funcția de identitate. Și ce e cool despre acest în comparație cu alte limbi și un alt nivel scăzut Limbi este că x pot fi de orice tip în sine și se va întoarce acel tip. Astfel, puteți imagine-- Să mă doar să rulați acest repede. Scuze. Deci, un singur lucru trebuie să menționez, de asemenea, este că acest editor eu sunt, folosind este numit rstudio. Aceasta este ceea ce se numește un IDE. Și un lucru care este foarte frumos despre acest este că aceasta include o mulțime de lucruri pe care vrei să faci în R de la sine doar foarte intuitiv. Deci, aici este o consolă interpret. Deci în mod similar, puteți obține, de asemenea, acest consolă brut doar de a face un R. de capital Și aceasta este exact același lucru ca și consola. Deci, eu pot face doar id funcție x, x, x. Și then-- și apoi că va fi bine în sine. Deci, rstudio este mare deoarece are consola. Ea are, de asemenea, documentele doriți pentru a rula pe. Și apoi are unele variabile pe care le puteți vedea în medii. Și apoi, dacă aveți pentru a face parcele, atunci puteti vedea doar aici, spre deosebire de gestionarea tuturor acestor ferestre diferite de la sine. De fapt Eu folosesc personal Vim, dar eu simt ca rstudio este excelent doar pentru a obține o idee bună de modul de utilizare a R. De obicei, când încerci să învăța unele noi sarcini, nu vrei să se ocupe prea multe lucruri deodată. Deci, R este doar o rstudio very-- este o modalitate foarte buna de a învăța R fără a fi nevoie de a face cu toate aceste alte lucruri. Deci, aici eu sunt difuzate id salut. Acest întoarce salut. id 123. Aici este un vector de numere întregi. Deci în mod similar, pentru că puteți ia orice fel de valoare, poti face revenirea id de x astfel se întoarce 1234 și 5. Și permiteți-mi să vă arăt că aceasta este într-adevăr un număr întreg. Și în mod similar, dacă faci clasă id x, va fi întreg. Și apoi, puteți, de asemenea compara cele două și e adevărat. Așa că a verifica dacă ID-x este egal Egal cu x și aviz că vă oferă două TRUEs. Deci, acest lucru nu se spune sunt cele două obiecte identice, dar sunt fiecare dintre intrările în cadrul vectorii identice. Iată bounded.compare. Deci, acest lucru este puțin mai complicat prin aceea că are o condiție dacă și altcineva și apoi este nevoie de doi argumente la un moment dat. Deci x este de orice tip. Și eu spun acest lucru al doilea argument este o. Acest lucru poate fi orice, de asemenea. Dar în mod implicit, o să ia 5, dacă nu se specifică nimic. Deci, aici am de gând să spun dacă x este mai mare decât o. Deci, dacă eu nu specifica o, ea spune că dacă x este mai mare de 5, apoi am de gând să se întoarcă TRUE. altfel, am de gând să se întoarcă FALSE. Așa că lasă-mă să merg mai departe și de a defini acest lucru. Și acum am de gând să rula bounded.compare 3. Așa se spune este de 3 mai than-- este mai mare de 3 5. Nu, nu e așa de FALSE. Și bounded.compare 3 și am de gând să-l compare cu ajutorul unui egal cu 2. Așa că acum spun da, acum am doresc o să fie altceva. Așa că am de gând să spun un, ar trebui să fie de 2. Pot face nici acest tip de notație sau spun un egal cu 2. Aceasta este o mult mai ușor de citit în care, atunci când sunteți uita la aceste într-adevăr funcții complicate care ia arguments-- multiple și acest poate fi zeci oftentimes-- doar că o este egal cu 2 este mai ușor de citit pentru vă astfel încât mai târziu, în viitor veți ști ce faci. Deci, în acest caz, sunt spune este 3 mai mare de 2. Da, este. Și în mod similar, pot elimina doar acest lucru și spune, este de 3 mai mare de 2 unde o este egal cu 2. Și asta e de asemenea adevărat. Da? Audiența: Esti executare linie cu linie? DUSTIN TRAN: Da, eu sunt. Deci, ceea ce fac aici este luând acest text document-- și ceea ce este grozav la rstudio este că Eu pot rula doar o short-- o comandă rapidă a tastei. Așa că fac control-Enter. Și apoi, eu iau linie în documentul de text și apoi punerea în consolă. Deci, aici vreau să spun, bounded.compare și fac control-X. Deci, eu pot face doar rula aici. Și apoi că va lua linie și apoi pune-l aici. Și apoi în mod similar, pot alerga aici. Și atunci se va păstra doar definirea liniile în consola de genul asta. Și dacă observați, de asemenea, cret bretele sunt acolo ca și în C sintaxa. X- dacă în cazul în care condiția este, de asemenea, va folosi paranteze și apoi puteți folosi altceva. Un altul este mai dacă. Deci, asta va fi x este egal egal cu un, de exemplu. Și apoi am de gând să reveni ceva aici. Observați că există două diferite lucruri aici ce se intampla. Una dintre ele este faptul că aici am specificând returna valoarea TRUE. Aici Spun doar că de x. Deci, R va fi, de obicei, în mod implicit ia ultimul arguments-- sau de a lua ultima linie a codului, și care va fi ceea ce este returnat. Deci, aici este același lucru ca face întoarcere de x. Și să-ți arăt. Și atunci, se va lucra la fel ca asta. Așa că lasă-mă să continue cu asta. Deci, mai, dacă. Și într-adevăr, eu pot întoarce orice mi-ar plăcea. Deci, eu nu trebuie nici măcar să întoarcere Booleans tot timpul, Mă pot întoarce pur și simplu altceva. Deci, eu pot face urs întoarcere. Deci, dacă x este egal cu egal a, se va reveni urs. În caz contrar, se va reveni TRUE. Pot face, de asemenea, un vector sau într-adevăr ceva. Și în mod normal în static Limbi dactilografiate, ai avea să specificați un tip de aici. Și observați că acesta poate fi pur și simplu orice. Și R este suficient de inteligent ca aceasta va face doar acest lucru și va funcționa bine. Așa că lasă-mă să definesc asta. Unexpected-- oh pare rău. Ar trebui să fie o acoladă aici. OK. Se răcește. În regulă. Deci, acum sa compare 3 și un egal cu 3. Deci, ar trebui să return-- yeah-- ursul valoare. Deci, acum ceva mai general, este ca și cum ce despre alte structuri de date. Deci, aveți această funcție. Acest lucru se întâmplă pentru a lucra pe orice fel de valoare cum ar fi 3 sau orice numeric, cu alte cuvinte, dublu. Dar ceea ce despre ceva ca un vector. Deci, ce se întâmplă dacă do-- așa că sunt O să atribui val la, să zicem, 4 și 6. Deci, dacă mă voi întoarce acest lucru, aceasta este un vector de la 4, 5, 6. Acum, să vedem ce se întâmplă dacă fac bounded.compare val. Deci, acest lucru se întâmplă pentru a vă oferi 15 1251. Deci, cu alte cuvinte, spune daca te uiti la această condiție așa se spune x este mai mic decât o sau ceva. Deci, aceasta este puțin confuz, deoarece acum tu chiar nu știu ce se întâmplă. Deci, cred un lucru care este într-adevăr bun despre doar încercarea de a depana este că puteți face doar val este mai mare decât o și a vedea ce se întâmplă acolo. Deci, val-- o este implicit 5 astfel Hai să facem Val mai mare de 5. Deci, aceasta este o FALSE FALSE vector ADEVARAT. Deci, acum, când te uiți la acest, se va spune dacă, și apoi o să vă dau această este un vector de false ADEVARAT. Deci, atunci când trece acest lucru în R, R nu are nici o idee despre ceea ce faci. Pentru că se așteaptă un singur valoare, care este un Boolean, iar acum dai un vector de Booleans. Deci în mod implicit, R este doar va spune ce naiba, Am de gând să se presupună că ești de gând să ia primul element de aici. Așa că am de gând să say-- am de gând să se presupună că acest lucru este fals. Deci va spune Nu, acest lucru nu este corect. De asemenea, se va fi val egal egal o. Nu, îmi pare rău 5. Și, de asemenea, va fi fals, de asemenea. Deci, o să spun nu, Nu este adevarat la fel de bine așa că este O să se întoarcă aceasta ultima. Deci, aceasta este fie un lucru bun sau unul rău lucru, în funcție de modul în care îl vezi. Pentru că atunci când ești crearea acestor funcții, nu știi de fapt ce se întâmplă. Deci, uneori ai vrea o eroare, sau poate vrei doar un avertisment. În acest caz, R nu face asta. Deci, este într-adevăr până la ai bazat pe ce crezi limba ar trebui să facă în acest caz dacă treci într-un vector de Booleans când faci o condiție dacă. Deci, să spunem că ai avut originalul una cu altcineva dacă întoarce TRUE și ești O să se întoarcă FALSE. Deci, un fel de abstractizare acest lucru este să spun că am chiar nu au nevoie de acest lucru condiționată. Un alt lucru pe care îl pot face este doar revenind valorile în sine. Deci, dacă observați, dacă face val este mai mare de 5, acest lucru se întâmplă pentru a reveni un vector false ADEVARAT. Poate că aceasta este ceea ce doresc pentru bounded.compare. Vrei să se întoarcă un vector de Booleans unde se compară fiecare din valorile pentru ei. Deci, poți să faci doar bounded.compare Funcția x, un egal cu 5. Și atunci în loc de a face această condiție dacă altceva, Mă duc să se întoarcă x este mai mare de 5. Deci, dacă e adevărat, atunci se va reveni TRUE. Și apoi, dacă nu e, e O să se întoarcă FALSE. Și acest lucru va lucra pentru oricare dintre aceste structuri. Deci, eu pot bounded.compare c 1 6 sau 9 și apoi voi spune un egal 6, de exemplu. Și apoi o să vă dau Boolean dreapta vector care sunteți proiectarea. Deci, acestea sunt doar funcții iar acum permiteți-mi să vă arăt câteva imagini interactive. Nu cred că de fapt am Wi-Fi aici asa ca lasa-ma doar merge mai departe și săriți peste asta cred. Dar un lucru e misto deși este că, dacă doar doresc să testeze o grămadă de comenzi date diferite, există o grămadă de diferite seturi de date care sunt deja preîncărcate în R. Deci una dintre ele este denumit setul de date iris. Aceasta este una dintre cele mai bine cunoscute cele din masina de învățare. De obicei Vei face doar un fel de cazuri de testare pentru a vedea dacă codul se execută. Așa că hai să verifice ceea ce iris este. Deci, acest lucru se întâmplă a fi un cadru de date. Și e un fel de mult timp, deoarece Tocmai am imprimat iris. Este imprimarea întregul lucru. Deci este dotat cu toate aceste nume diferite. Deci, iris este o colecție de diferite flori. În acest caz, se spune tu speciile de ea, toate aceste latimi diferite și lungimi de foaie și petale. Și astfel, în mod normal, în cazul în care doriți să imprimați iris, de exemplu, nu vrei să-l aibă face toate acestea pentru că poate prelua întreaga consolă. Deci, un lucru care este într-adevăr frumos este funcția cap. Deci, dacă faci doar cap iris, acest lucru vă va oferi primele cinci rânduri, sau șase cred. Și apoi de bine, puteti specifica doar aici. Deci, 20-- acest lucru va da tu primele 20 de rânduri. Și de fapt am fost un fel de surprins de faptul că această mi-a dat șase Să-mi merge mai departe și verificați iris-- sau cap, îmi pare rău. Și aici se va da tu documentația din ceea ce face capul valoare. Deci, se întoarce primul sau ultima a unui obiect. Și apoi am de gând să uita-te la valorile implicite. Și apoi se spune implicit Metoda de cap x și n este egal cu 6L. Deci, acest returnează primele șase elemente. Și în mod similar dacă observați aici, m-am nu trebuie să specificați n = 6. În mod implicit se folosește șase, cred. Și apoi, dacă vreau să specificați un anumit valoare, atunci pot vedea la fel de bine. Așa că este unele comenzi simple și aici este un alt unul care este doar-- bine, Am can-- aceasta este de fapt un pic mai complex, dar acest lucru va dura doar clasa de fiecare coloană a setului de date iris. Deci, aceasta vă va arăta ceea ce fiecare dintre acestea coloanele sunt în termeni de tipuri lor. Deci, lungime sepală este numeric, Lățimea sepală este numeric. Toate aceste valori sunt doar numeric pentru că vă pot spune de la aceste date structura acestea sunt toți o să numerică. Și coloana Specii va fi un factor. Deci, în mod normal, ai crede că acest lucru este ca un șir de caractere. Dar daca doar faci irisSpecies, și apoi am de gând să fac cap 5, iar acest lucru se întâmplă pentru a imprima în primele cinci valori. Și apoi observa acest lucru niveluri. Deci, acest lucru este saying-- acesta este modul lui R de a avea variabile categorice. Deci, în loc de doar având în șiruri de caractere, ea are un nivel care să specifice care dintre aceste lucruri sunt. Deci, haideți să spunem irisSpecies 1. Deci, ce vrei să faci aici este că sunt Subsetting la această coloană Specii. Deci, aceasta ia Coloană Specii și apoi indici l pentru a obține primul element. Deci, acest lucru ar trebui să vă dea setosa. Și, de asemenea, vă oferă niveluri aici. Astfel, puteți de asemenea compara acest lucru setosa caracter iar acest lucru nu se întâmplă să fie adevărat, deoarece una este de un tip diferit de celălalt. Sau Cred că este adevărat că R este mai inteligent decât asta. Și se uită la acest lucru și apoi spune, poate că aceasta este ceea ce vrei. Deci va spun caracterul string setosa este la fel ca aceasta. Și apoi în mod similar, puteți De asemenea, la fel ca și apuca aceste așa mai departe. Deci, care este doar un fel de comenzi rapide ale setului de date. Deci, aici e ceva de explorare a datelor. Deci, aceasta este un pic mai mult implicat cu analiza datelor. Și asta este luat de la unele bootcamp la R la Berkeley. Deci, bibliotecă străin. Așa că am de gând să se încarce într-un bibliotecă care se numește străin. Deci, acest lucru se întâmplă să-mi dea read.dta astfel presupunem că am acest set de date. Acest lucru este stocat în curentul director de consolă meu de lucru. Așa că hai să vedem ce directorul de lucru este. Deci, aici e directorul meu de lucru. Și citi date dot, acest lucru, spune acest fișier se află în dosarul de date de acest director de lucru curent. Și acest lucru nu este read.dta o comandă implicit. Cred că o încărcat în deja. IEI asumat Am încărcat acest lucru în deja. Dar așa read.dta nu se întâmplă a fi o comandă implicit. Și de aceea vei avea pentru a încărca în această bibliotecă package-- acest pachet numit străin. Și dacă nu aveți pachetul, cred străin este unul dintre cele încorporate. În caz contrar, puteți, de asemenea face install.packages iar acest lucru va instala pachetul. Și acest lucru vă va oferi R. Uh, nu. Și apoi Mă duc să se oprească asta pentru că am o au deja. Dar ceea ce este foarte frumos despre R este faptul că gestionarea pachetului Sistemul este foarte elegant. Pentru că va stoca tot într-adevăr frumos pentru tine. Deci, în acest caz, se va stoca l în, cred, această bibliotecă aici. Deci, oricând doriți să instala pachete noi, e la fel de simplu ca și face install.packages și R va gestiona toate pachetele pentru tine. Deci, nu trebuie să faci ceva în Python, în cazul în care aveți pachet extern manageri, cum ar fi hârtie Anaconda în cazul în care ești doing-- instalați Pachete afara de Python și apoi încercați să le executați tine. Deci, acesta este într-adevăr un fel frumos. Și install.packages necesită internet. Este o ia de la un server și magazia că colectează toate Pachete este numit CRAN. Și puteți specifica ce fel de oglindă doriți să descărcați pachetele de. Deci, aici eu sunt de a lua acest set de date. Am citit în utilizarea acestei funcții. Așa că lasă-mă să merg mai departe și face asta. Deci, să presupunem că aveți această CCD și aveți absolut nici o idee ce este. Și acest fapt vine în sus destul de des în industria în cazul în care doar aveți aceste tone și tone de lucruri murdar și sunt incredibil de nemarcat. Deci, aici am această CCD și nu știu ceea ce este atât de Sunt doar arătând pentru a verifica. Așa că am de gând să fac cu capul înainte. Așa că am verifica primele șase coloane de ceea ce acest set de date este. Deci, aceasta este stat, pres04, iar apoi toate acestea fel diferit de coloane. Și ceea ce este interesant aici, cred, este că ar presupune că acest lucru arata ca un fel de alegeri. Și cred că tocmai de la uita la dosar nume este un fel de colectare de date despre candidați sau alegători care au votat pentru președinți specifice sau candidații președinte pentru alegerile din 2004. Deci, aici este valorile 1, 2 astfel o modalitate de a stoca candidații președinte sunt numele lor. În acest caz, se pare ca ei sunt valori pur și simplu întregi. Deci 2004, a fost Bush versus Kerry cred. Și acum, să spunem că pur și simplu nu știu dacă 1 corespunde Bush sau 2 corespunde Kerry sau și așa mai departe și așa mai departe, nu? Și acest lucru este, doar pentru mine, o problemă destul de comună. Deci, ce puteți face în acest caz? Așa că haideți să afișeze toate aceste lucruri. de stat, eu sunt presupunând că acest lucru provine din diferite state. partyid, venituri. Să ne uităm la partyid. Poate un singur lucru il poti face este uita-te la fiecare dintre observațiile care au o partyid de republican sau democrat sau ceva. Așa că hai să uităm la ceea ce este partyid. Așa că am de gând să ia dat și apoi mă duc pentru a face acest semn dolar Operatorul care am făcut-o anterior iar acest lucru se întâmplă la subset de acea coloană. Și apoi voi la cap acest lucru în 20, doar pentru a vedea cum arata. Deci, aceasta este doar o adunatura de AN. Deci, cu alte cuvinte, aveți datele care lipsesc cu privire la tipii ăștia. Dar tu, de asemenea, observați acest dat partyid este un factor astfel încât acest lucru vă oferă diferite categorii. Deci, cu alte cuvinte, partyid poate lua Democrat, republican, independent, sau altceva. Deci, haideți să mergem mai departe și să a se vedea care dintre acestea este-- oh, OK. Așa că am de gând să subset la partyid și apoi uita-te la cele care sunt Democrat, de exemplu. Acest lucru se întâmplă pentru a vă oferi un Boolean, un Boolean mare de TRUEs și FALSEs. Și acum, să zicem vreau a subset la tipii ăștia. Deci, acest lucru se va lua dat-mi și subset de oricare observații au egal partyid egal democrat. Și acest lucru este destul de mult, deoarece există atât de mulți dintre ei. Așa că acum, am de gând să se îndrepte acest lucru în 20. Și, după cum observați, este egal cu egal este interesant în care sunteți already-- bază de asemenea, inclusiv AN. Deci, în acest caz, tot nu se poate obține orice informație pentru că acum ai AN si doriti doar pentru a vedea care dintre observație corespund Democrat și nu acestea lipsesc se valori. Deci, cum te-ai scăpa de aceste AN? Deci, aici eu sunt doar folosind tasta pe meu cursor și apoi spune deplasează în jurul. Și apoi aici Mă duc să spun is.na datpartyid. Deci acest lucru și și va lua doi vectori Boolean diferite și spun că va fi Adevărat și fals, de exemplu. Deci va face această componentă-înțelept. Deci, aici vreau să spun decolare cadrului de date, subset pentru cei care corespund Democrat, și scoateți oricare dintre ele care nu sunt NA. Deci, acest will-- ar trebui îți dau ceva. Să vedem is.na. Să încercăm datpartyid is.na. Și acest lucru ar trebui să acorde Tu-- sorry-- doar un vector boolean. Și apoi, pentru că este atât de mult, Am de gând să subset la 20. OK. Deci, aceasta ar trebui să funcționeze. Și acesta va fi, de asemenea, TRUEs. Ah, deci eroarea mea este că eu I'm-- folosi C ++ și C alternativ, așa că am face această greșeală tot timpul. Și operatorul de fapt cel dorit. Nu vrei să folosească două ampersand, doar unul singur. OK. Să vedem. Așa că am subsetted la partyid unde sunt democrat și ei nu lipsesc valorile. Și acum să ne uităm la care dintre ei au votat pentru. Deci, se pare ca cel mai mult dintre ei au votat pentru 1. Așa că am de gând să merg mai departe și spun că este Kerry. Și în mod similar, puteți De asemenea, du-te la republican și sperăm, acest lucru ar trebui să vă dea 2. E doar o grămadă de diferite coloane. Și într-adevăr, e 2. Deci, partyid toate republican, cele mai multe dintre ele sunt cu drept de vot pentru 2 persoane. Deci, se pare ca, doar uitandu-se la acest lucru, Republican va fi un very-- sau partyid va fi un foarte factor important în determinarea care candidatul sunt vom vota pentru. Și acest lucru este evident adevărat, în general. Iar acest Meciuri dumneavoastră intuiție, desigur. Deci, se pare ca eu sunt în criză de timp, astfel încât permiteți-mi să ar trebui să meargă mai departe și arată unele imagini rapide. Deci, aici e ceva care este ușor mai complicat cu vizualizare. Deci, în acest caz, aceasta este o foarte simplă analiză de doar verificare ce președintele '04 este. Deci, în acest caz, să spui a vrut să răspundă la această întrebare. Deci, să presupunem că am vrut să știm vot comportament în alegerile 2004 președinte și modul în care variază în funcție de rasă. Deci, nu numai vrei să a se vedea comportamentul de vot, dar doriți să subset al fiecărui rasă și un fel de rezumă. Și pot să vă spun doar prin această notație complex că acest lucru este un fel de asistent neclar. Astfel, una dintre cele mai avansate R pachetele care, de asemenea, un fel de recent este numit dplyr. Deci, este cea de aici. Și ggplot2 ggg-- este doar un frumos mod de a face vizualizări bune decât cea încorporat. Așa că am de gând să se încarce aceste două biblioteci. Și apoi, am de gând să merg înainte și rulați această comandă. Se pot trata doar acest lucru ca o cutie neagră. Ce se întâmplă este că această conductă Operatorul se trece în acest argument în aici. Deci, eu spun grup de dat rasă și apoi președinte 04. Și apoi, toate aceste alte comenzi sunt filtrarea și apoi sintetizarea în cazul în care fac conta și atunci am o complot aici. OK rece. Deci, haideți să mergem mai departe și vezi cum arata. Deci, ce se întâmplă aici este că am doar complotat fiecare dintre curse și apoi care dintre ei au votat pentru. Și aceste două diferite Valorile corespund 2 și 1. Dacă doriți să fie mai elegant, puteți, de asemenea specifica doar că 2 este Kerry-- sau 2 este Bush, iar apoi 1 este Kerry. Și puteți avea, de asemenea, că în legenda ta. Și puteți împărți, de asemenea, aceste grafice. Pentru ca un lucru este că, dacă observați, acest lucru nu este foarte ușor să se identifice care dintre aceste două valori sunt mai mari. Deci, un lucru pe care vrea să face este să ia acest domeniu albastru și doar muta aici, astfel încât să pot compara aceste două una lângă alta. Și cred că e ceva ce Nu am timp să fac chiar acum, dar asta e, de asemenea, foarte ușor de făcut. Poti sa te uiti doar în paginile de manual ale ggplot. Deci, poți să faci la fel ca și ggplot că și citi în această pagină om. Așa că lasă-mă să repede vă arăt câteva lucruri interesante. Să mergem mai departe și du-te sa-- doar un aplicarea de masina de învățare. Să presupunem că avem aceste trei Pachete așa am de gând să se încarce acestora în. Deci, asta doar imprimă unele Informații după ce am încărcat în lucru. Deci, eu spun acest read.csv, acest set de date, iar acum Am de gând să mergeți mai departe și uite și a vedea ce este în interiorul acestui set de date. Astfel, primele 20 de observații. Așa că am X1, X2, iar Y. Deci, se pare ca un buchet de aceste valori sunt variind de la 20 la 80, poate și ceva. Și apoi în mod similar pentru X2 și apoi acest Y pare a fi etichete 0 și 1. Pentru a verifica acest lucru, pot doar face X1 date rezumat. Și apoi în mod similar pentru toate celelalte coloane. Deci rezumat este o modalitate rapidă de doar arătându-vă valori rapid. Oh, îmi pare rău. Aceasta ar trebui să fie Y. Deci, în acest caz, dă cuantile, mediane, maxes de asemenea. În acest caz, dataY, puteți vedea că este doar de gând să fie 0 și 1. De asemenea, media este de a spune 0,6, înseamnă doar că ea se pare ca am mai multe 1s decât 0s. Așa că lasă-mă să merg mai departe și spectacol tu cum arata. Așa că Mă duc la complot asta. Să vedem cum să îndepărteze acest lucru. Oh OK. OK. Deci, asta este ceea ce pare. Deci, se pare ca galben-am specificate ca 0, iar apoi roșu am specificat ca 1s. Deci, aici se pare ca puncte de etichete și ea Se pare că ai vrut doar câteva fel de clustering în acest sens. Și permiteți-mi să mergeți mai departe și spectacol tu unele dintre aceste funcții built-in. Deci, aici este lm. Deci, aceasta este doar încearcă pentru a se potrivi o linie de aceasta. Deci, ce este cel mai bun mod care pot potrivi o linie astfel de că va separa cel mai bine acest tip de grupare. Și în mod ideal, puteți vedea doar că tocmai am rulat toate aceste comenzi și apoi, am de gând înainte și adăugați linia. Deci, acest lucru pare ca cea mai buna ghicire. Durează cel mai bun care minimizează eroarea în încercarea de a se potrivi această linie. Evident, acest lucru pare un fel de bun, dar asta nu e cel mai bun. Și modele liniare, în general, vor fi foarte mare pentru teorie și doar un fel de fundamentele constitutive ale mașinii de învățare. Dar, în practică, ai de gând să vrei sa faci ceva mai general. Astfel, puteți încerca pur și simplu de funcționare ceva numit o rețea neuronală. Aceste lucruri sunt din ce in ce mai frecvente. Și ei doar lucrează fantastic pentru seturi de date de mari dimensiuni. Deci, în acest caz, ne vom have-- numai hai see-- avem nrow. Deci, nrow este doar că numărul de rânduri. Deci, în acest caz, am au 100 de observații. Așa că lasă-mă să merg mai departe și face o rețea neuronală. Deci, acest lucru este foarte frumos pentru că eu pot spune doar nnet iar apoi am regresia Y. Deci Y este acea coloană. Și apoi regresia pe celelalte două variabile. Deci, aceasta este mai scurt notație pentru X1 și X2. Deci, haideți să mergeți mai departe și a alerga acest lucru. Oh, îmi pare rău. Am nevoie pentru a rula toată chestia asta. Și acest lucru este doar de imprimare notație pentru cât de repede sau nu repede convergente. Deci, se pare că a converg. Așa că lasă-mă să merg mai departe și imprimare ce arata asta ca. Vezi aici e imaginea și aici este un contur care arată cât de bine se potrivește. Și acest lucru este doar-- puteți vedea acest că acest lucru este foarte, foarte frumos. Ar putea fi chiar overfitting, dar puteți, de asemenea, cont de acest lucru cu alte tehnici cum ar fi cross-validare. Și acestea sunt, de asemenea, construite în R. Și permiteți-mi să vă arăt susține mașină vector. Acesta este un alt într-adevăr comun Tehnica în masina de învățare. Este foarte similar cu modele liniare, dar se folosește ceea ce se numește o metodă nucleu. Și să vedem cât de bine că nu. Deci acesta este foarte similar cu modul bine o rețea neuronală efectuează, dar este mult mai lin. Și acest lucru se bazează pe de what-- cum muncă SVMs. Deci, aceasta este doar o foarte scurtă prezentare a unora funcțiilor built-in puteți face și, de asemenea, o parte din explorare date. Așa că lasă-mă să merg mai departe și du-te înapoi la diapozitivele. Deci evident, aceasta este nu foarte cuprinzătoare. Și acest lucru este de fapt doar un teaser care vă arată ce poți să faci cu adevărat în R. Deci, dacă ai la fel ca pentru a afla mai multe, aici sunt o grămadă de resurse diferite. Deci, dacă ești pasionat de manuale sau esti doar pasionat de lectură lucruri on-line, atunci acesta este un fantastic unul de Hadley Wickham, care, de asemenea, a creat toate acestea Pachete cu adevărat rece. Daca esti pasionat de clipuri video, atunci Berkeley are un bootcamp minunat asta e several-- că e un fel de lung. Și vă va învăța aproape tot ce doriți să știți despre R. Și în mod similar, există Codeacademy și toate acestea alt tip site-uri de interactive. Ele sunt, de asemenea, obținerea common-- mai multe și mai frecvente. Deci, acest lucru este foarte similar cu Codeacademy. Și, în sfârșit, dacă doar doresc comunitar și de a ajuta, acestea sunt o grămadă de lucruri pe care le puteți merge la. Evident, noi încă utilizați liste de discuții, doar ca aproape orice alt comunitate limbaj de programare. Și #rstats, aceasta este comunitatea noastră Twitter. Asta este de fapt destul de comună. Și apoi utilizator! Este doar conferința noastră. Și apoi, desigur, puteți folosi toate aceste alte lucruri Q & A, ca Stack Overflow, Google și apoi GitHub. Deoarece cele mai multe dintre aceste pachete și o mulțime de comunității va fi centrat în jurul curs de dezvoltare Codul pentru că este open source. Și e doar foarte frumos pe GitHub. Și, în sfârșit, puteți să mă contactați dacă trebuie doar întrebări rapide. Deci ma puteti gasi pe Twitter aici, site-ul meu, și doar e-mail meu. Astfel, sperăm, că a fost something-- doar un teaser scurt de ce R este într-adevăr capabil de a face. Și sperăm, doar verifica aceste trei link-uri si vezi ce poti face mai mult. Și cred că asta este vorba doar despre asta. Mulțumesc. [Aplauze]