CONNOR HARRIS: Stadig jeg tror nogle spændende video produceret af en professionel rådgivning der bruger R meget i sit arbejde. Fortæller: Hvad er bag statistikken, Analytics, og visualiseringer at nutidens dygtigste data forskere og erhvervsledere er afhængige af at gøre kraftfulde beslutninger? Du må ikke altid se det. Men det er der. Det hedder R, open source r-- den statistisk programmeringssprog at de registrerede eksperter verden løbet brug for alt fra kortlægning bred social og markedsføring tendenser online at udvikle den finansielle og klima modeller, der hjælper drive vores økonomier og lokalsamfund. Men hvad er R og hvor har R starte? Nå oprindeligt, R startede her med to professorer der ønskede en bedre statistisk platform for deres elever. Så de skabte en modelleret efter statistiske sprog S. De, sammen med mange andre, holdes arbejder med og brug af R, skabe værktøjer til R og finde nye ansøgninger om R hver dag. Takket være dette er verdensomspændende fællesskab indsats, R holdes vokser med tusindvis af brugeroprettede biblioteker bygget at øge R funktionalitet og crowd-fremskaffede validering kvalitet og støtte fra de mest anerkendte industriens ledere på alle områder, der bruger R. Hvilket er stor, fordi R er den bedste til, hvad den gør. Spirende eksperter hurtigt og let fortolke, interagere med, og visualisere data viser deres hastigt voksende fællesskab af R-brugere på verdensplan og se, hvordan open source R fortsat forme fremtiden for statistisk analyse og data videnskab. CONNOR HARRIS: OK, stor. Så min egen præsentation vil være en smule mere ædru. Det vil ikke indebære, at meget spændende baggrundsmusik. Men som du så i videoen, R er sortering af en generel purpose program sprog. Men det blev oprettet meste til statistisk arbejde. Så det er designet til statistik, til dataanalyse, for data mining. Og så du kan se dette i en masse de designvalg, at skaberne af R fremstillet. Den er designet til stort set, folk, der ikke eksperter i programmering, der er bare optagning programmering på den side, så de kan gøre deres arbejde i samfundsfag eller i statistik eller hvad. Det har en masse meget vigtige forskelle fra C. Men syntaksen og paradigmer at den bruger stort set den samme. Og du bør føle sig temmelig meget hjemme ret off the bat. Det er en absolut nødvendighed sprog. Må ikke bekymre dig for meget om, at hvis du ikke kender udtrykket. Men der er en forskel mellem bydende nødvendigt, deklarativ, og funktionelle. Bydende nødvendigt bare betyder, at du gør udsagn, der er dybest set kommandoer. Og så tolken eller computer følger dem én efter én. Det er svagt indtastet, er der ingen type erklæringer i R. Og derefter linjerne mellem forskellige typer er en smule mere løs end de er i C, f.eks. Og som jeg sagde, at der er meget omfattende faciliteter til graftegning, til statistisk analyse, for data mining. Disse er begge indbygget i sprog og som videoen sagde, tusindvis af tredjeparts biblioteker, du kan downloade og bruge gratis med meget løs licensbetingelser. Så generelt vil jeg anbefale at du ser på disse to bøger Hvis du kommer til at arbejde på R. One af dem er officielle R begynderniveau guide. Det vedligeholdes af core udviklere af R. Du kan downloade det igen, fri for opkræve og juridisk på det link der. Alle disse dias kommer til at gå op på internettet, på CS50 hjemmeside Når dette er gjort. Så ingen grund til at kopiere ting ned febrilsk. Den anden er en lærebog af Cosma Shalizi, der er en statistik professor ved Carnegie Mellon, kaldet Advanced Data Analyse fra en Elementær Point of View. Dette er ikke primært en R bog. Det er en statistik bog og det er en dataanalyse bog. Men det er meget tilgængelige for folk, der have et minimum af statistik viden. Jeg har aldrig taget en formel kursus. Jeg ved bare, stumper og stykker fra forskellige allierede fag at jeg har taget kurser i. Og jeg var i stand til at forstå det udmærket. Alle tallene er givet i R. De er lavet i F og de har også kodelistningerne under hver figur, der fortæller dig hvordan du gør hver figur med R-kode. Og det er meget nyttigt, hvis du forsøger at efterligne nogle tal, du ser i en bog. Og igen gratis download stat.cmu.edu/cshalizi/ Beklager, der bør skråstreg tilde cshalizi. Jeg vil sørge for at korrigere når de officielle dias gå op. / ADAfaEPoV som er lige det akronym af bogen titel. Så generelle caveats-- R har en masse muligheder. Jeg vil kun være i stand til at dække overfladen af ​​en masse ting. Også den første del af seminaret kommer til at være noget af en data dump. Jeg er helt ked af det. Dybest set, vil jeg introducere dig til en masse ting ret off the bat, går så hurtigt som muligt. Og så får vi til den sjove del, som er demoen, hvor jeg kan vise dig alt at vi har talt om på skærmen. Og du kan spille rundt på egen hånd. Så der kommer til at være en masse af tekniske ting kastet op på her. Må ikke bekymre dig om at kopiere alt det ned. Fordi A, kan du få alle de ting på CS50 hjemmeside senere. Og B, det er egentlig ikke så vigtigt at huske dette fra dias. Det er mere vigtigt, at du får nogle intuitive anlæg med det og der kommer fra bare at spille rundt. Så hvorfor bruge R? Dybest set, hvis du har et projekt, indebærer minedrift store datasæt, data visualisering, du skal bruge R. Hvis du er gør komplicerede statistiske analyser, det ville være vanskeligt i Excel, for eksempel, ville det også god-- også hvis du laver statistisk analyse, der er automatiseret. Lad os sige, at du opretholde en hjemmeside. Og du ønsker at læse serverens log hver dag og kompilere nogle liste, Ligesom de bedste lande, dine brugere kommer fra, nogle summariske statistikker om, hvor lang tid de bruger på dit websted eller hvad. Og du ønsker at køre dette hver dag. Nu, hvis du gør dette i Excel, du er nødt til at gå til din server log, importere det ind i en Excel data regneark, kører hele analysen manuelt. Med R, kan du bare skrive en script. Planlæg det til at køre hver dag fra styresystemet. Og så hver aften på 2:00 AM, eller når du planlægge det til at køre, det vil se gennem din internet trafik for den pågældende dag. Og så ved den næste dag, vil du har denne skinnende, ny rapport eller hvad med alle de oplysninger, du har bedt om. Så dybest set R er til Cisco programmering versus Cisco analyse. Indledende er gjort. Lad os komme ind i de virkelige ting. Så der er tre reelle typer i sproget. Der er numerisk type. Der er en slags en forskel mellem heltal og flydende punkter, men ikke rigtig. Der er en karakter skriver, som er strenge. Og der er en logisk skriver, hvilket er Booleans. Og du kan konvertere mellem typer ved hjælp af disse funktioner som numerisk, som karakter, som logisk. Hvis du ringer, for eksempel, som numerisk på en snor, det vil forsøge at læse, at strengen som et tal, på samme måde at A2I og scanf gør, og C. Hvis du kalder som numerisk på sand eller falsk det vil konvertere til 1 eller 0. Hvis du ringer som karakter på noget det vil konvertere det til et string repræsentation. Og så er der vektorer og matricer. Så vektorer er dybest set 1 dimensionelle arrays. De er det, vi kalder arrays i C. Matricer, 2 dimensionelle arrays. Og derefter højere dimensionelle arrays, du kan har 3, 4, 5 dimensioner eller hvad af numeriske værdier, af strygere, af logiske værdier. Du har også lister, som er en slags associative array. Jeg får ind i denne lidt. Så en vigtig ting der ture folk op i F er, at der ikke er nogen reelle, rene atomare typer. Der er ingen reelle forskel mellem et nummer, som en numerisk værdi, og en liste over numeriske værdier. Numeriske værdier er faktisk den samme som vektorerne med en længde 1. Og det har en række vigtige konsekvenser. One, betyder det, at du kan gøre ting meget let, der involverer gerne tilføje et nummer til en vektor. R vil som udgangspunkt figur ud, hvad du mener med det. Og jeg vil komme til at i et sekund. Det betyder også, at der er ingen måde for den type checker-- i det omfang at noget lignende findes i r-- fortælle når du har bestået i det indre værdi når det forventer en matrix eller omvendt. Og som kan forårsage nogle mærkelige problemer, som jeg løb ind, når Jeg var ved hjælp af R under min sommer job. Og der er ingen mixed-type arrays. Så du kan ikke have et array var første elementer er, ved jeg ikke, strengen "John" og andet element er nummer 42. Hvis du forsøger at gøre det, så vil du få alt bare omdannes til en streng. Så vi har strengen John, snor 42. Så usædvanligt syntaktisk features-- fleste R syntaks er meget lig C. Der er et par vigtige forskelle. Typing er meget svag. Så der er ingen variable erklæringer. Opgave bruger den mærkelige fejl, mindre end bindestreg. Kommentarer er med hash-mærket. Jeg gætter nu dage vi kalder det hashtag selvom det er ikke rigtig accurate-- ikke dobbelt skråstreg. Modular rester er med %% tegn. Heltalsdivision er med% /%, hvilket er meget svært at læse, når det er fremskrevet op på skærmen. Du kan få intervaller af heltal med tyktarmen. Så 2,5 vil give dig en vektor af alle de numre 2 til 5. Arrays er en indekseret, hvilke skruer en masse mennesker op, hvis de er fra mere typiske programmeringssprog, som C, hvor de fleste tingene er nul-indekseret. Igen, dette er, hvor R arv som et sprog for ligesom ikke professionelle programmører kommer i. Hvis du er en sociolog eller en økonom eller noget og du forsøger at bruge R dybest set som et supplement til din vigtigere professionelle arbejde, du kommer til at finde en indeksering lidt mere naturligt. Fordi du begynde at tælle ved 1 i hverdagen, ikke er 0. For-loops, dette svarer til den foreach konstruere i PHP, som du kommer til at lære in-- temmelig snart. Hvilket er for værdi i vektor og så kan du gøre ting med værdi. PUBLIKUM: Det er kommet op i foredrag. CONNOR HARRIS: Åh, det er komme op foredrag fremragende. PUBLIKUM: Opgaven, er det formodes at pege fra højre til venstre? CONNOR HARRIS: Fra højre til venstre, ja. Du kan tænke på det som værdien på højre skubbet ind i variable til venstre. PUBLIKUM: OK. CONNOR HARRIS: Og endelig funktion syntaks er en smule mærkeligt. Du har funktionen navnet foo, tildelte til dette nøgleordet funktion, efterfulgt af alle de argumenter og derefter kroppen af ​​funktionen efter det. Igen disse ting kan synes en smule mærkeligt. De vil blive anden karakter efter du arbejder med sproget for lidt. Så vektorer, den måde du konstruere en vektor er du typen C, som er et nøgleord, så alle de numre, du ønsker eller strenge eller hvad. Argumenter også være vektorer. Men den resulterende matrix bliver fladtrykt. Så du kan ikke have arrays hvor nogle elementer er enlige tal og nogle elementer er arrays selv. Så hvis du forsøger at konstruere en matrix var det første element er 4 og det andet element er array 3,5 du vil bare få en tre elementer array, 4,3,5. De kan ikke være af blandet type. Hvis du forsøger at læse eller skrive uden for rammerne af en vektor du får denne værdi kaldes NA et som står for en manglende værdi. Og det er beregnet til ligesom statistikere, der arbejder med ufuldstændige datasæt. Hvis du anvender en funktion, der er meningen at tage bare ét nummer til et array så hvad du får, er, at funktion vil kortlægge over array. Så hvis din funktion lad os sige tager et nummer og returnerer det firkantede. Du anvender det til array 2,3,5 Hvad du får, er den vifte 4,9,25. Og det er meget nyttigt fordi det betyder, at du behøver ikke at skrive for sløjfer til gør meget simple ting som at anvende en funktion til alle medlemmer af et datasæt. Som, hvis du arbejder med store datasæt, du skal gøre en masse. Binære funktioner er anvendt post ved indrejse. Jeg vil komme ind i denne. Du kan få adgang til dem med arrays eller vektorer med firkantede parenteser. Så vektor navn kantede parenteser 1 vil give dig det første element. Vector navn firkantede parenteser 2 vil give dig det andet element. Du kan videregive en vektor af indekser og du vil komme tilbage ud dybest set en sub faktor. Så du kan gøre vektor navn parentes C, 2,4 og du får ud af en vektor, der indeholder den anden og fjerde elementer af matrixen. Og hvis du vil have bare en hurtig oversigt statistik af en vektor som interkvartilt interval, median, maksimum, uanset hvad, du kan bare skrive resumé vektor navn og få det ud. Det er ikke rigtig nyttig i programmering, men hvis du spiller omkring datasæt, det er praktisk. Matrices-- dybest set højere dimensionelle arrays. De har denne særlige notation syntaks. Matrix med en matrix, der får fyldt in-- undskyld, matrix med data, antal rækker, antal kolonner. Når du har nogle data, det udfylder array generelt vil gå fra top til bund først. Derefter venstre til højre. Så sådan. Og R har indbygget matrix multiplikationer, spektral dekomponering, diagonalisering, en masse ting. Hvis du vil have højere dimensionelle arrays, så 3, 4, 5, eller hvad dimensioner, du kan gøre det. Syntaksen er vifte dim lig c, derefter en liste over de dimensioner. Så hvis du ønsker en 4 dimensionelle array med dimensioner 4, 7, 8, 9, array, dim lig c (4,7,8,9). Du får adgang enkeltværdier med beslag første post komma anden post. Kan du få hele skiver af rækker eller kolonner. Med denne ufuldstændige syntaks er det bare rækkenummer komma eller komma kolonne antal. Så lister er en slags associeret array. De har deres egen syntaks her. Igen ikke febrilsk kopiere alt dette ned. Dette er blot så folk går gennem dias senere har alt dette i en flot reference. Og det vil blive meget naturlig, når Jeg faktisk gå gennem demoer. Så præsenterer en grundlæggende forbundet arrays. Du kan få adgang værdier med listenavn, dollartegn, nøgle. Så hvis din liste er opkaldt foo, så kan du få adgang til det på den måde. Du kan få en hel nøgle-værdi par ved at passere på pladsen beslag indekset. Hvis du læser fra en ikke-eksisterende nøgle, får du null. Det vil ikke fejl. Ting er, R vil gøre, som meget med null som det kan. Og det kan betyde, at hvis du er ikke forventer at komme null ud af nogle liste læse, får du nogle uforudsigelige fejl længere nede linjen. Dette skete for mig min sommer job, når jeg var ved hjælp R hvor jeg skiftede, hvordan en bestemt Listen blev defineret på ét sted men ikke ændre senere på kode, som læste værdier fra den. Og så hvad der skete, var jeg var læsning null-værdier ud af denne liste, passerer dem i funktioner, og bliver meget forvirret da jeg fik alle mulige tilfældige uendeligheder dukker op i denne funktion. For hvis du anvender vist maksimum eller minimum funktioner til null, du får uendelige værdier ud. Datarammer, de er en underklasse af listen. Hver værdi er en vektor af samme længde. Og de er vant til at præsentere, dybest set, datatabeller. Der er denne initialisering syntaks. Alt dette vil igen, være meget klarere, når du kommer til demoen. Og gode ved datarammer er, at man kan give navne til alle kolonner og navne på alle rækkerne. Og så gør adgang dem lidt venligere. Også dette er, hvordan de fleste funktioner, læst i data fra Excel-regneark eller fra tekstfiler, for eksempel, vil læse i deres data. De vil sætte det ind en slags dataramme. Så functions-- funktionerne syntaks er en smule underligt. Igen er det navnet på den funktion, tildele, dette søgeord funktion og derefter listen over argumenter. Så der er nogle pæne ting om, hvordan funktioner fungerer her. For én, kan du faktisk tildele standardværdier til visse argumenter. Så du kan sige R1 equals-- du kan sige foo er en funktion, hvor R1 er lig med noget som standard, hvis brugeren angiver ingen argumenter. Ellers er det hvad han lagt i. Og det er meget praktisk fordi en masse af vores funktioner har ofte snesevis eller hundredvis af argumenter. For eksempel dem til plotte grafer eller plotte scatter plots har argumenter, der styrer alt fra titlen og aksen etiketter til farven på regressionslinier. Og så hvis du ikke ønsker at få folk til at angive hver enkelt af disse hundredvis af argumenter kontrollerende hvert eneste aspekt af et plot eller en regression eller hvad, det er rart at have disse standardværdier. Og så kan du faktisk skrive, som du så tilbage her. Eller finde en bedre eksempel. Når du ringer til funktioner, du kan faktisk ringe til dem ved hjælp af argument navne. Så her er et eksempel på matrix constructor. Det tager tre argumenter. Normalt du har data, som er en vektor. Du har N række, som er antallet af rækker. Du har N cols-- antal kolonner. De ting er, hvis du skriver N rækken lig hvad og N er lig col uanset når du ringer denne funktion, du kan faktisk vende dem. Så du kan sætte N col først og N rækken sekund, og det vil gøre nogen forskel. Så det er en fin lille funktion. Gjorde import og eksport. Dette kan gøres, dybest set. Der er også faciliteter til at skrive ud vilkårlige R indsigelse mod en binær fil og derefter læse dem tilbage i senere. Hvilket er praktisk, hvis du laver en stor interaktiv session R og du skal gemme tingene meget hurtigt. Som standard R har en arbejdsgruppe mappe at filer bliver skrevet ud i og læse igen fra. Du kan se, at med getwg, ændre det med setdw. Intet særligt interessant her Så nu de faktiske statistikker stuff-- multilineær regression. Så den sædvanlige syntaks er en smule kompliceret. Modellen er en stor genstand dybest set. Det får tildelt til lm, som er et funktionskald. Det første element, y tilde x1 plus hvad. Mit syntaks her er en smule forvirrende. Jeg er helt ked af det, det er den standard måde at datalogiske bøger gøre dette. Men det er lidt underligt. Så dybest set, det er lm parentes, første element er variable-- undskyld, afhængig variabel tilde x1 plus x2 plus men mange uafhængige variabler, du har. Og så disse kan enten være vektorer, alle af samme længde. Eller de kan være kolonnen overskrifter i en data frame at du bare angive i andet argument dataramme. Du kan også angive en mere kompleks formel så du ikke behøver at lineært relatere en en afhængig variabel, eller én vektor på en allerede eksisterende vektor. Du kan gøre, for eksempel en vektorkomposant y kvadreret plus 1 og relatere det mod log af en anden vektor. Du kan udskrive oversigter over den model med denne kommando kaldes summary-- bare resumé Parens model. Igen noget andet, jeg bør afklare. Noget andet, der vil blive korrigeret når slæderne gå op på internettet. Hvis du blot ønsker at beregne en simpel korrelation du kan bruge korrelation vektor 1 vektor 2 funktionen kerne. Metode er som standard Pearson korrelationer. Det er de standard dem, du kan gøre. Der er også Spearman og Kendell korrelationer der er nogle forskellige rangorden korrelation. Godt de ikke beregne produkt øjeblikke mellem vektorerne selv, men af ​​vektor rang ordrer. Jeg vil forklare det senere. PUBLIKUM: Hurtigt spørgsmål CONNER HARRIS: Selvfølgelig. PUBLIKUM: Så når du beregne for de simple korrelationer gøre du antage, at der er en statistisk betydning for sammenhængen? CONNER HARRIS: Du behøver ikke at. En LM er dybest set bare en maskine. Det vil tage to ting og det vil spytte ud koefficienter for den bedste pasform linje. Det rapporterer også standard fejl på disse koefficienter. Og det vil fortælle dig, ligesom den skæringspunkt statistisk signifikant eller en forskel fra 0. Er hældningen for den bedst fit linjen statistisk forskellig fra nul, et cetera. Så det forudsætter noget, tror jeg er bedste svar på dit spørgsmål. OKAY. Plotting-- så den vigtigste årsag bør du bruge R, ligesom multilineær regression. Dybest set alle sprog har nogle anlæg for det. Og ærligt R'er syntaks for regression er en smule mystisk. Men plotte er hvor det virkelig skinner. Den arbejdshest funktionen er plot og det tager to vektorer, x og y. Og derefter ellipser står for en meget stort antal valgfrie argumenter, styre alt fra titler til farver af forskellige linjer eller forskellige punkter, til den type plot. Du kan have scatter parceller eller line plots. [Uhørligt] 2 vektorer af samme længde. Du kan gå forud for dette med vedhæfte data ramme i dit script. Og dette vil lade dig bare bruge kolonne overskrifter i stedet for separate vektorer. Du kan tilføje bedst tilpassede linjer og lokale regression kurver for din graf. Disse kommandoer opført her, ab linje og linjer, som standard disse bliver skrevet ind pop up-vinduer fordi det forudsætter, at du bruger R interaktivt. Hvis du ikke er, du kan skrive to filer, er i virkeligheden helst format du ønsker. Undskyld, jeg har en tastefejl Jeg har lige indset. Hvis du vil åbne anden grafiske indretning du kan bruge denne funktion kaldet PNG eller JPEG eller en masse andre billedformater. Og du kan skrive grafer til hvad filnavn, du angiver. Hvis du vil annullere, at du skal use-- Jeg skrev ikke dette i slide-- men der er en funktion kaldet dev prik det tager ingen argumenter. Så der er faciliteter til 3D plotte og for konturen plotte Hvis du ønsker at gøre grafer af to uafhængige variable. Jeg vil ikke komme ind disse lige nu. Der er også nogle faciliteter til animation de er normalt vedligeholdes af tredjemand. Jeg har gjort animationer med R grafer, men jeg har ikke brugt disse tredjeparts biblioteker. Så jeg kan ikke rigtig bevidne til hvor gode de er. Hvad jeg anbefale, hvis du ønsker at gøre animationer med R er du kan skrive ud af alle rammerne for animationerne og så kan du bruge en tredjeparts program-- typiske dem kaldes FFmpeg eller ImageMagick-- at sy alle dine frames i én animation. Så tid til demo. Så hvis du bruger en Unix lignende system som er Linux BSD men som bruger BSD. OS X åbner et terminal vindue og Type R ved kommandoprompten. Hvis du har R studie eller lignende, der også fungerer. For Windows-brugere bør du være stand til at finde R i menuen Start. Det bør hedde noget ligesom R x64 3 punkt uanset hvad. Åbn det deroppe. Så lad mig nu bare åbne et terminalvindue. Okay, søgning. PUBLIKUM: Kommando-Space CONNER HARRIS: Kommando-Space, tak. Jeg har ikke normalt bruger Macs. Terminal, viser nyt vindue. Nyt vindue er indstillinger grundlæggende, R. Så bør du få en velkomst besked, noget som dette. Så jeg bruger R interaktivt. Du kan også skrive R scripts selvfølgelig. Dybest set scripts køre på nøjagtig samme måde som hvis du sad ved computeren skrive i hver linje ad gangen. Så lad os starte med at lave en vektor. En pil C 1, 2. 1, 2, 4. OK, helt sikkert. Jeg kan gøre skriftstørrelsen større. PUBLIKUM: Kommando-Plus CONNER HARRIS: Kommando-Plus. Kommando-Plus. Okay, hvordan er det? God? OKAY. Så lad os starte med at om en vektor listen. Må en, pil, C 1,2,4. Vi kan se en. Må ikke bekymre dig om beslaget der. Beslagene er så hvis du udskrive meget lange arrays, vi kan, hvor du er. Et eksempel ville være, hvis jeg vil bare interval 2-200. Hvis jeg udskrevet en meget lange array, konsollerne er bare så jeg kan holde styr på, hvilke indeks vi er på, hvis jeg søger gennem denne visuelt. Så alligevel har vi en. Så jeg sagde før, at arrays interagerer meget pænt med for eksempel unære operationer som denne. Så hvad du tror, ​​jeg vil få, hvis jeg skriver et plus 1? Yep. Lige nu vil jeg gøre denne anderledes array. Lad os sige b c 20,40, 80. Så hvad tror du denne kommando vil gøre? Tilføj elementerne. Og så dybest set det er, hvad det gør. Så dette er temmelig praktisk. Så jeg hvordan om jeg gør dette. c er, lad os sige, 6 gange 1 til 10. Så hvad gør jeg ønsker at se indeholdt, tror du? Så alle multipla af seks. Nu, hvad tror du vil ske, hvis jeg gør det? Jeg vil gøre det en smule klarere, C, C. Så hvad sker der, gør du tror, ​​hvis jeg gør det? et plus c. [Uhørligt] PUBLIKUM: Enten en fejl eller det øger blot de første tre elementer. CONNER HARRIS: Ikke helt. Dette er, hvad vi fik. Hvad sker der er en kortere array, a, fik cykluser. Så fik vi 124, 124, 124. Ja. Og dybest set, kan du se denne adfærd før, et plus 1, som en underklasse af denne adfærd, hvor den korteste array er blot antallet 1, som er et ét element array. Jeg bare være at sige vektor alle tiden i stedet for array, fordi det er hvad r dokumentation normalt gør. Det er en indgroet c vane. OK, og så nu har vi dette array. Så vi har dette array, c. Vi kan få resumé statistikker om C, resumé C. Og det er rart. Så lad os nu gøre nogle matrix ting. Lad os sige, m er en matrix. Lad os gøre det til en tre med tre en. Så nrows lig med 3, og ncols lig med 3. Og for data lad os do-- så hvad tror du, det kommer til at gøre? Ret, det er den næste. Det er nrow og ncolumn. Så hvad jeg har gjort, er jeg har erklæret en tre med tre matrix og jeg har bestået i en ni-element array. Så logaritmen af ​​alle elementer én gennem ni. Og alle disse værdier fylde op array-- undskyld? PUBLIKUM: Det er basen 10 logfiler? CONNER HARRIS: Nej, log er naturlige logaritmer, så basen e. Ja, hvis du ønsker bunden 10 log, jeg tror du ville have at logge uanset, divideret med log 10. Og så data i [højttalersystemet] lige fylder arrayet, så top til bund, derefter fra venstre mod højre. Og hvis du ønskede at gøre nogle andre array, lad os sige n matrix. Lad os gøre, ved jeg ikke, 2 til 13. Eller jeg vil gøre noget mere interessant. Jeg vil gøre 2 til 4. nrow lig, lad os sige, 3. Ncol lig 4. n. Så vi har fået dette. Og nu, hvis vi ønsker at formere disse, vi ville gøre n procent gange procent, fordi det er n. Og vi har matrix produkter. Af de måde, har du se, hvordan da jeg erklærede n, de 2 til 4 vektor fik cyklet indtil det fyldes op alle n? Hvis du ønskede at tage egenværdi nedbrydning, det er noget, vi kan gøre meget nemt. Vi kan gøre eigen n. Og så dette er vores første møde med en liste. Så eigen n er en liste med to nøgler. Værdier, hvilket er dette array her. Og vektorer, som er dette array her. Så hvis du ønsker at udtrække, sige, at dette tredje kolonne fra egenvektorer matrix, fordi egenvektorerne søjlevektorer. Så vi kan gøre VEC eigen n dollartegn vektorer, komma 3, i [uhørligt]. Vec. Er det, som man kunne forvente. Så siger n gange procent gange vec. Så resultatet her helt sikkert ligner hvis vi tog den tredje egenværdi her, som svarer til den tredje egenvektor. Det bare ganget alt i dette egenvektor, komponent-kloge, af egenværdi. Og det er, hvad vi ville forvente, fordi det er hvad egenværdier er. Har nogen her ikke taget lineær algebra? Et par mennesker, OK. Bare slå din hjerne fra for lidt. Og faktisk hvis vi tager eigen n dollartegn værdier 3 gange VEC, godt få det samme. Det er formateret forskelligt som en række vektor i stedet for en søjle vektor, men big deal. Og så dem er dybest set den flot ting, som vi kan gøre med matricer, demonstreret lister. Jeg skal vise den pæne ting om funktioner samt. Så lad os say-- [uhørligt] funktion, lad os kalde det funk mod funktion n n squared-- faktisk, det er egentlig ikke den bedste. a, b, en kvadreret plus b. Så én ting om funktioner, igen, er de behøver ikke eksplicitte return udsagn. Så du kan bare-- den evalueret sidste udtalelse bliver meddelelsen tilbage, eller værdien returneres. Så i dette tilfælde, er vi kun at evaluere én sætning, en kvadratisk plus b. Det vil være standard returværdien. Det skader aldrig at sætte i returnere værdier eksplicit, især hvis du har at gøre med en funktion af meget kompliceret logik flyde. Men du behøver ikke dem. Så nu kan vi gøre funk 5, 1, og dette er dybest set, hvad du ville forvente. Noget andet, vi kan gøre, Vi kan faktisk gøre funk b er lig med 1, a er lig 5. Så hvis vi angiver hvilket nummer her, som argument går til hvilke argumenter i funktion, kan vi vende rundt disse værdier overalt, hvor vi ønsker. PUBLIKUM: Er der en grund at skrive det ud med b lig i modsætning til blot at bruge numre og kommaet? CONNER HARRIS: Ja, som regel gøre dette, hvis du har funktioner med en masse argumenter. Det kunne ofte være ligesom flag, som du ville kun vil bruge i sjældne tilfælde. Og denne måde kan du only-- dig kan henvise til de specifikke argumenter at du ønsker at bruge ikke-standardværdier for, og du behøver ikke at skrive en flok af flag lig falsk efter dem. Eller jeg kan skrive dette igen med en standard værdi som b er lig med 2. Og så kunne jeg gøre f funk, Jeg vil gøre 4, 1 denne gang. Og 17, hvilket er 4 kvadreret plus 1, som man kunne forvente. Men jeg kunne også bare kalde dette med funk 4, og jeg får 18, fordi Jeg kan ikke angive b. Så b får standardværdien på 2. OK, så nu, hvis du er efter sammen med demoen, skrive denne linje på din kommando Spørg og se, hvad der kommer op. Faktisk gør det ikke. Skriver dette. Du bør få noget som dette. Så mtcars er en indbygget data indstillet for denne demonstration formål, der kommer med-- der kommer i som standard med din r distribution. Dette er en samling af statistikker fra en 1974 udgave af motordrevne tendens magasin på en række forskellige bilmodeller. Så der er miles per gallon, cylinders-- Jeg glemmer, hvad disp is-- hestekræfter. Sandsynligvis. Hvis du bare Google MT biler, derefter en af ​​de første resultater vil være fra officielle r dokumentation og det vil forklare alle disse datafelter. Så vægten is-- wt er bilens vægt i ton. Q sek er kvart mile tid. Så nu kan vi gøre nogle sjove ting om MT biler er et datafelt. Så vi kan gøre ting ligesom row navne, mt biler. Og dette er en liste over alle rækkerne i datasættet, der er navne på biler. Vi kan gøre colnames, mt biler dette. Hvis du gør mt biler, sub-numeriske indeks, ligesom 2. vi får den anden kolonne ud af dette, hvilket ville være cylindre. PUBLIKUM: Hvad gjorde du? CONNER HARRIS: jeg har skrevet mt biler, beslag e, som gav mig den anden kolonne ud af mt biler. Eller hvis vi ønsker en række, kan jeg skrive mtcars komma 2, f.eks. Andet runde 2 komma, sådan. Og der går i din række. Det her bare giver dig en kolonne, men kolonnen som en vektor. Jeg har lige indset nu har jeg glemte at påvise nogle seje ting om vektorer at du kan gøre med indeks. Så lad mig gøre det lige nu. Så lad os gøre c gets-- sætte dette på pause-- 2 gange 1 til 10. Så C er bare at være vektoren 2 til 20. Jeg kan tage elementer som dette, c2. Jeg kan passere i en vektor som dette, så lad C-- mig bruge andet navn end c, ligesom VEC c. Dybest set, jeg gør dette, så du ikke får forvirret mellem C som en vektorkonstruktionen funktion, og derefter c som en variabel navn. Vec beslag c 4, 5, 7. Dette får mig ud den fjerde, femte, og syv elementer i arrayet. Jeg kan gøre VEC, sat i en negativ indeks, ligesom negativ 4. Det vil få mig ud af dette med det fjerde element fjernes. Så hvis jeg ønskede at gøre skiver, Jeg kan gøre vec 2 til 6. 2 kolon 6 er bare en anden vektor, som er 2, 3, 4, 5, 6. Spytter det. Så alligevel, tilbage til mt biler. Så lad os gøre nogle regressioner. Lad os sige, model gets-- lad os lineært regress-- ved jeg ikke. Først lad os gøre vedhæfte mtcars, selvfølgelig. Så [uhørligt] model lm, lad os relatere miles per gallon på tilde vægt. Og så dataramme er mtcars. Så sammenfattende model. OK, så det ser lidt kompliceret. Men dybest set, at se, som om vi forsøge at udtrykke miles per gallon som en lineær funktion af vægt, så fik vi denne linje her, som opfanger på 37,28. 37,28 ville være de teoretiske miles per gallon på en bil, der vejer nul. Og så for hver ekstra ton, du banke omkring fem miles per gallon ud af det. Begge disse koefficienter dig kan se, standardafvigelser der. Og de er meget statistisk signifikant. Så vi kan være meget sikker på at 1 e 10 til den negative 10. Så 1 gange noget at den negative 10, at hvis du laver en tungere bil, det vil have dårligere miles per gallon. Eller vi kan teste nogle andre model. Ligesom i stedet for regression dette på vægt, lad os relatere det på log over vægt, fordi måske den effektive vægt om kilometertal er en eller anden måde ikke er lineær. Dette gav os en r kvadreret på 0,7528. Så lad os prøve dette. Denne gang lad os gøre en anden variabel, også. Model2. Så resumé, model2. Okay, så igen, vi fik vores bedste pasform linje her. Og det time-- dette siger, udgangspunkt, at hver gang du øge vægten af en bil med en faktor e du mister så mange miles per gallon. Og så denne gang vores resterende standard fejl det-- det gør ikke noget, virkelig. Residualstandardafvigelsen er dybest set bare standardfejlen at du har tilbage, efter at du tage væk tendensen linje. Og vores R kvadreret her er 0,81, som er en smule bedre end det vi havde før, 0,52. Og så lad os nu tilføje en Udtrykket denne regression. Så lad os relatere miles per gallon både på log over vægtene og, lad os gøre, Q miles, kvart mil tid. OK, skal det have til-- okay, qsec. Qsec. Actually-- undskyld, hvad? Lad mig kalde det noget andet udover model2. Lad mig kalde dette model3. Og så nu kan vi gøre resumé model3. Og så igen, det er dybest set hvad man kunne forvente. Du har positiv opsnappe. Den effektive stigende vægt er negativ. Og den effektive stigende kvart mile tid er positive, men selv mindre end vægten. Nu intuitivt, kan du få mening ud af dette ved at sige at tænke over sportsvogne. Der er en meget hurtig acceleration, en meget kort kvart mil gange. De er også kommer til at bruge mere gas, mens mere fornuftige biler går at have langsommere acceleration, højere kvartal mile gange, og bruger mindre gas ,, så højere miles per gallon. Alle tiders. Og så nu er det tid til plot noget som dette. Så lad os do-- så nøgne knogler, vi kan gøre plots-- fordi jeg har vedhæftet denne dataramme before-- vi kan bare gøre plots, vægt mpg. Gør dette til en lidt større. Der, vi dybest set har en scatter plot, men de punkter er lidt svært at se på dette. Jeg husker ikke overfladiskhed hvad syntaks er til at ændre plottet. Så jeg tror det vil være et godt tidspunkt at opdrage, der er en meget flot indbygget hjælp funktion, hjælp citater fungerer navn. Vi vil opdrage dybest set noget, du gerne vil. Jeg tror, ​​jeg vil faktisk gøre dette typen er lig p for point plots. Vidste at ændre noget? Og nej, ikke rigtig. Okay. Af en eller anden grund, da jeg gjorde det på min egen computer et stykke tid siden, alle scatter punkter var meget klarere. Under alle omstændigheder, er scatter slags synlige? Der er en der. Et par der, et par der. Du kan slags se dem, ikke? Så hvis vi ønsker at tilføje en bedste pasform linje til dette plot her, som er lidt nøgne bones-- lad mig gøre det lidt pænere. Main lig versus vægt. Miles per gallon. Igen, kan du se, hvor nyttig valgfrie argumenter er her med også ikke at skulle sætte tingene i et bestemt rækkefølge med tastatur argumenter når du har parceller, fordi disse tage en masse argumenter. XLAB lig vægt, vægt, tons. Okay. OK, ja, denne enhed er at være lidt irriterende. Men du kan se slags deroppe, der er en graf titel på siden. Herovre there's-- på bunden her er akseetiketterne. Jeg kan ikke huske stående fod hvad kommandoerne ars-- hvad funktioner er at øge størrelsen af ​​disse etiketter og titler, men de er der. Og så hvis vi ønsker at tilføje bedst tilpassede linje, vi kunne gøre noget like-- jeg har syntaksen skrevet op her. Så husk vi blot tilføje model var mpg, vægt, mtcars. Og så hvis jeg ønskede at tilføje en bedste pasform linje, jeg kunne gøre a, b linje model. Og boom, vi har en bedste pasform linje. Det er lidt svært at se igen. Jeg er helt ked af det teknologiske vanskeligheder. Men det kører stort set øverste venstre hjørne til nederste højre. Og hvis vægten var større, var det tydeligt, at opsnappe er, hvad du kan finde fra de summariske statistikker hvis du skriver sammenfattende model. OK, så jeg håber, at alle får noget af en fornemmelse af, hvad R er, hvad det er godt for. Du kunne gøre langt pænere parceller end dette på din egen tid, hvis du vil. Så det fremmede funktion interface. Det er noget, der ikke typisk dækket i indledende foredrag eller indledende noget for r. Det er ikke sandsynligt, du får brug for det. Men jeg fandt det nyttigt i mine egne projekter i fortiden. Og der er ingen god tutorial til det online. Så jeg vil blot skynder jer alle gennem denne og så er du fri til at forlade. Og så den udenlandske Funktionen interface er hvad du kan bruge til at ringe ud for at se funktioner med et R. Internt R er bygget på C. R'er aritmetiske er bare C s 64-bit floating point aritmetik, der er type dobbelt [uhørligt]. Og du måske ønsker at gøre dette for en flok grunde. For én, er R fortolkes, er det ikke kompileret ned til maskinkode. Så du kan omskrive din indre sløjfer i C og derefter få Fordelen ved at benytte R. lide det er en smule mere praktisk end C. Det har bedre graftegning faciliteter og whatnot. Og mens den stadig er i stand til at få tophastighed ud af de indre sløjfer, der er, hvor du virkelig har brug for det. Genbrug af eksisterende C-biblioteker, det er også vigtigt. Hvis du har nogle C bibliotek for lignende, Jeg ved ikke, Fourier transformationer, eller nogle meget Archean statistik, der er anvendt i høj energi astrofysik eller noget, ved jeg ikke. Høj energi astrofysik er ikke engang en tror, ​​tror jeg. Men du kan gøre det i stedet for at at skrive en indfødt R havn af dem. Og på til-- og igen, ligesom hvis du ser i de fleste af R standardindstillinger biblioteker, på interne, den interne er kommer til at bruge den udenlandske funktion grænseflade meget udførligt. De vil have ting som Fourier transformerer eller computing korrelation koefficienter skrevet i C, og de vil bare have R indpakning omkring dem. Interfacet er en smule vanskeligt. jeg synes dens problemer er overdrevet i en masse af de instruktioner, du finder. Men ikke desto mindre, det er lidt forvirrende. Og jeg har ikke været i stand til finde en god tutorial for det, så dette er det lige nu. Igen, dette hele segment er mere til senere brug. Må ikke bekymre dig om kopiering alt ned lige nu. Så følgende instruktioner er for Unix-lignende systemer, Linux, BSD, OS X. Jeg kender ikke hvordan det virker på Windows, men du bare ikke gør dit afgangsprojekt på Windows. Du virkelig ikke ønsker at. Unix er meget bedre sæt op til afslappet programmering. Så dybest set fremmed funktion interface. Hvis du ønsker at skrive en C funktion til brug sammen med R, det har at tage alle de argumenter som pejlemærker. Så for enkeltværdier Dette betyder, at det påpeget værdien. For arrays, dette er en pegepind til det første element, som er, hvad array-navne egentlig betyder. Igen, det er noget du skal have temmelig totalt ned efter p sæt fem. Array navne er blot pointere til det første element, Det floating-point type er dobbelt. Og din funktion har til at returnere ugyldige. Den eneste måde, at det kan faktisk fortælle R, hvad der skete er ved at ændre den hukommelse, at R gav til det gennem udenlandske funktion grænseflade. Så jeg har skrevet dette eksempel her, er en funktion, der beregner anvendelse prikproduktet af to vektorer. Det tager to argumenter, vec1, vec2, som er vektorerne selv, og derefter n, som er en længde, fordi igen, R har indbygget [uhørligt] for at finde ud af længden af ​​vektorer, men C ikke. I C, vektorer er en vilkårlig afgrænset luns af hukommelse. Så den måde, du kan beregne skalarprodukter bare sætte dette ud parameter til nul, og derefter gentage gennem fra 1. til stjerne n, fordi n er en pointer til længden, blot tilføje noget til det ud parameter. Og det kan være god praksis hvis du vil gøre dette at skrive to separate C-funktioner. En af dem has-- En af dem bare tager de argumenter og de typer at de normalt ville være i C. Så det tager en række argumenter som pejlemærker. Men single-værdi argumenter som n, det tager bare som værdier ved kopiering, uden pointere. Og så er det ikke gør [Uhørligt] ud pointer. Og så kan du få en anden, dybest set, wrapper funktion, stort set håndterer kravene af den udenlandske funktion grænseflade for dig. Den måde du kalder dette i R er, når du har din funktion skrevet i C, du skriver R cmd shlib, R kommando delt bibliotek, foo dot c, eller hvad din fil hedder, og OS shell ikke i R-terminalen. Og det vil skabe en bibliotek kaldet foo dot så. Og så kan du indlæse den i vores script eller interaktivt med kommandoen dyn dot belastning. Så er der en funktion i F kaldes dot c. Dette tager argumenter, der er først navnet på funktionen i C at du vil ringe til. Og så alle de parametre til denne funktion, de skal være i den rigtige rækkefølge. Du er nødt til at bruge denne type tvang fungerer som heltal, som dobbelt, som karakter, og som logisk. Og så når det vender tilbage den listen, som igen er lige en tilknyttet række af parameter navne og de værdier efter at funktionen er kørt. Så i dette tilfælde, fordi dot prod har argumenter vec1, vec2, og int n, n ud. Til prik c vi har dot prod, navnet på funktionen vi kalder, vec1, vec2, type tvinge. Længden af ​​enten vektor, Jeg valgte vec1 vilkårligt. Det ville være mere robust at sige s heltal min længde vec1, længde vec2. Så lige så dobbelt nul, fordi vi ikke rigtig ligeglad med, hvad går ind i ud parameter, fordi vi er sætte den til nul alligevel. Og så resultaterne vil være en store associeret array af grundlæggende vec1 er uanset hvad, vec2 er hvad. Men vi er interesseret i ud, så vi kan få det ud. Dette er igen, en meget eksempel legetøj af en udenlandsk funktion interface. Men hvis du har til at beregne dot produkter af massive vektorer i loops, eller hvis du skal gøre noget andet i en løkke, og du ikke ønsker at stole på R, som ikke har lidt af overliggende bygget ind i det, kan det være nyttigt. Igen, det er ikke normalt en indledende emne til R. Det er ikke meget veldokumenteret. Jeg er bare inklusive det, fordi Jeg har fundet det nyttigt i fortiden. Så dårlig praksis. Jeg nævnte, at der er en for-løkke i funktion. Generelt bør du ikke, i sproget, ikke bruge det. Baseret på, hvordan R implementerer iteration internt, kan det være langsom. De bare ser også grimt. R håndterer vektorer meget pænt, så oftentimes behøver du ikke at bruge det. Så kan du normalt erstatte en vektor ofte med disse funktioner kaldes høj ordens funktioner, kort, Reducer, Find, eller Filter. Jeg vil bare give nogle eksempler på, hvad disse gør. Kort er en højere orden funktion, fordi det tager en funktion som et argument. Så du kan give det en funktion, kan du give det et array, og det vil anvende funktionen til hvert element i arrayet og returnere den nye array. Reducer, dybest set du give det et array, du giver det en funktion, der tager to argumenter. Den vil anvende funktionen først, første argument med en vis forret værdi. Derefter til dette resultat i den anden. Derefter til dette resultat i den tredje, derefter til dette resultat i fjerde. Og derefter vende tilbage når det bliver til enden. Så for eksempel, hvis du ønsker at beregne summen af ​​alle de elementer i et array, end man kunne kalde reducere med [uhørligt] reducere en tilføjelse funktion, ligesom funk a, b, returnere et plus b. Og start derefter en værdi på 0. Og alle disse, kan du finde dem beskrevet i F-dokumentationen, i enhver lærebog om funktionel programmering. Der er også denne klasse af funktioner godkend funktioner, som jeg don't-- de er lidt svært at forklare, men hvis du kigger i [uhørligt] reserveret, jeg citerede i starten, Han forklarer dem ganske godt i hans tillæg på F programmering. Mere om praksis, tilføje til vektorer. Ja? Jeg tror, ​​jeg skal rette det. I den første linje, VEC pil, at pilen ikke bør være der. Du kan tildele til en vektor, igen, ved at tage sin længde plus 1 og tildele en vis værdi for det. Det vil forlænge vektoren, eller du kan gøre VEC ligemænd c, vec newvalue. Igen, hvis du bruger C med ét argument som en vektor, den resulterende hierarki bliver fladtrykt. Så du bare få en vektor der er udvidet med 1. Aldrig gøre dette. Grunden til at du ikke bør gøre dette er det. Når du tildele en vektor, det giver det en vis chunk hukommelse. Hvis du øger den vektor størrelse, det har at omfordele vektoren et andet sted. Og så omfordeling er ret dyrt. Jeg vil ikke gå i detaljer om, hvordan hukommelse målere gennemføres af operativsystemet niveau, men det tager en masse tid at finde en ny bid af hukommelse. Og også, hvis du er omfordeling af masser og masser gradvist større bidder, du ender med noget, der hedder hukommelse fragmentering, hvor den tilgængelige hukommelse er opdelt i masser af små blokke i hukommelsen målere synspunkt. Og det bliver sværere og sværere at finde hukommelse til andre ting. Så i stedet, hvis du har brug for at gøre dette, hvis du har brug for at vokse en vektor fra den ene ende til den næste, i stedet for at tilføje til det konstant, skal du på forhånd tildele den. Vec pil, vektor længde lig 1.000, eller hvad. Og så kan du bare tildele til vektoren værdier én en tid, efter du har tildelt det én gang. Jeg løb ind i dette, igen, min sommer job da jeg skrev NRA forskellen ligningsløseren. Ikke symbolsk numerisk. Ideen er, at når du har en værdi for din løsning, du bruge den til at beregne den næste. Så min naturlige naiv hældning var at sige OK, så jeg vil starte med en vektor det er en væsentlig værdi. Beregn fra, at den næste værdi der går på min løsning vektor, og tilføje det. Opret noget andet, tilføj det. Det gik meget, meget langsomt. Og når jeg indset dette og jeg har ændret mit system fra at tilføje til denne vektor Ligesom 10.000 til 100.000 gange, bare pre-tildeling af en vektor og bare kører med. Jeg fik mere end 1.000 gange hastighed op. Så dette er en meget almindelig fælde for R-programmering. Hvis du har brug for at opbygge en vektor stykke for stykke, præ-allokere den. Et andet fælles tur up-- dette er min sidste slide, ikke worry-- er fejlhåndtering. R, at være ærlig, ikke virkelig gør dette meget godt. Der er en masse af problemer, der kan dukke op. For eksempel, hvis du får et array eller en vektor ud af en funktion at du havde forventet en enkelt værdi kommer fra, eller omvendt, og du passerer det ind i en funktion, du skrev forventer en enkelt værdi, der kan være et problem. Visse funktioner returnere null som gør, siger, læser fra et ikke-eksisterende nøgle i en liste. Men null er ikke som C hvor, hvis du forsøger at læse fra en gammel pointer, [uhørligt] til null pointer, det bare seg fejl og hvis du er i dit debugger det fortæller dig præcis hvor du er. I stedet null vil do-- funktioner vil gøre uforudsigelige ting hvis de er afleveret null. Ligesom hvis du er afleveret max null, Det vil give dig negative uendelighed. Og så, ja. Og så dette skete til mig en gang, da jeg havde ændret en masse felter på min liste struktur gang uden at ændre dem andre steder da jeg læste fra dem. Og så fik jeg alle mulige tilfældige uendeligt resultater dukker op og jeg ingen idé om, hvor de kom fra. Og desværre er der ingen reel R streng tilstand hvor man kan sige, hvis noget ser ud som det kunne være en fejl, bare stoppe der, så jeg kan være disciplineret og løse det. Men der er noget kaldet stop, hvis ikke. Det svarer til C s hævde, hvis du har talt om det. Jeg tror ikke, C hævde er et foredrag emne, men din sektionsleder kunne være gået over det. Og stoppe hvis ikke dybest set tager nogen prædikat, så eventuelle erklæringer, som kan være sande eller falske. Og hvis det er falsk, stopper programmet. Det fortæller dig præcis, hvad linje du var på og hvilken tilstand mislykkedes. Og denne meget nyttige, for eksempel, tilregnelighed kontrol, funktion indgange. Så hvis du har en funktion og du forventer, siger, hvis du skulle give mig en dato, jeg ønsker datoerne være bare en vektor af længde 1 og et sted mellem 1 og 31. Og hvis ikke, jeg kender noget er gået galt. Og jeg vælger at stoppe der, før denne har tilfældig banke på effekter med kode at det er sværere at spore igennem. Så det er en mulig bruge til stop, hvis ikke. Under alle omstændigheder, OK. Så det er slut. Tak så meget for at komme. Jeg er en rang amatør på dette. Så ked af, hvis du keder eller forvirret eller hvad har du. Jeg er glad for at tage spørgsmål via e-mail ved connorharris@college.harvard.edu. Det gælder også for alle ser denne live eller senere. Også selvom jeg ikke er en TF, er jeg også meget villige til at tjene som en uofficiel rådgiver for alle, der er hjælp R i et afsluttende projekt. Hvis du gerne vil det, så bare tale med din TF og derefter skrive mig en mail, så Jeg ved, hvad du arbejder på og så jeg kan oprette møde gange med dig, hvis du ønsker. Så igen, mange tak. Jeg håber du nød det. PUBLIKUM: [uhørligt]. CONNER HARRIS: Selvfølgelig. PUBLIKUM: Hvilken slags af et projekt ville en CS-studerende bruge R for? CONNER HARRIS: Så hvis du ikke gør noget, der er rent i data mining, for eksempel, og der er masser af ting du kunne gøre med det med data minedrift og machine learning. Du vil måske bruge R for en bestanddel af noget. Jeg opdraget oprindeligt eksemplet af hvis du skriver en hjemmeside og du vil køre automatiseret statistisk analyse af din server logfiler på et bestemt tidspunkt hver dag, der kan være noget, der er meget let at gøre på bare et kort R script, som du kan planlægge at køre hver nat, f.eks. Og jeg er sikker på, hvis der er nogen grund til du ville ønsker statistikker eller graffaciliteten og har denne kørsel automatisk i stedet for at skulle interagere med ting i Excel, for eksempel, det er noget du måske ønsker at bruge R for. Så flere spørgsmål, før jeg forlader? Ingen? Okay, godt, igen, tak tak for at komme.