CONNOR HARRIS: Still jeg tror noen spennende video produsert av en profesjonell konsulent som bruker R mye i sitt arbeid. FORTELLER: Hva ligger bak statistikken, analytics, og visualiseringer at dagens smarteste dataforskere og bedriftsledere stole på å lage kraftige avgjørelser? Du kan ikke alltid se det. Men den er der. Det kalles R, r-- åpen kildekode statistisk programmeringsspråk at dataeksperter verdens over bruk for alt fra kartlegging bred sosial og markedsføring trender online å utvikle økonomiske og klima modeller som hjelper drive våre økonomier og lokalsamfunn. Men hva er egentlig R og hvor fikk R begynne? Vel opprinnelig startet R her med to professorer som ønsket en bedre statistisk plattform for sine elever. Så de skapt en modellert etter den statistiske språk S. De, sammen med mange andre, holdt arbeider på og bruke R, skape verktøy for R og finne nye applikasjoner for R hver dag. Takket være denne er verdensomspennende fellesskap innsats, R holdt vokser med tusenvis av brukeropprettede biblioteker bygget å forbedre R funksjonalitet og Publikum-hentet kvalitet validering og støtte fra de mest anerkjente industriledere i alle felt som bruker R. Og det er flott, fordi R er best på hva den gjør. Spirende eksperter raskt og lett å tolke, samhandle med, og visualisere data viser sin raskt voksende fellesskap av R brukere over hele verden og se hvordan åpen kildekode R fortsetter å forme fremtiden for statistisk analyse og data vitenskap. CONNOR HARRIS: OK, flott. Så min egen presentasjon vil være litt mer nøktern. Det vil ikke innebære at mye spennende bakgrunnsmusikk. Men som du så i videoen, er R sort av en generell programspråk. Men det ble opprettet hovedsakelig for statistisk arbeid. Så det er designet for statistikk, for dataanalyse, for data mining. Og slik at du kan se dette i en rekke de designvalg som skaperne av R gjort. Den er designet for stor grad, folk som ikke er eksperter i programmering, som er bare å plukke opp programmering på siden, slik at de kan gjøre sitt arbeid i samfunnsvitenskap eller i statistikk eller hva. Den har en rekke svært viktige forskjeller fra C. Men syntaks og paradigmer at den bruker er stort sett den samme. Og du skal føle pen mye hjemme rett utenfor balltre. Det er et viktig språk. Ikke bekymre deg for mye om det Hvis du ikke kjenner begrepet. Men det er en forskjell mellom imperativ, deklarative, og funksjonell. Maktpåliggende betyr bare du gjør utsagn som er utgangspunktet kommandoer. Og så tolk eller datamaskin følger dem én etter én. Det er svakt skrevet, er det ingen typen erklæringer i R. Og deretter linjene mellom ulike typer er litt mer løs enn de er i C, for eksempel. Og som jeg sa det er svært omfattende fasiliteter for å tegne grafer for statistiske analyse, for data mining. Disse er bygget inn i begge språk, og som videoen sa, tusenvis av tredjeparts biblioteker som du kan laste ned og bruke gratis med svært løs konsesjonsvilkår. Så generelt, vil jeg anbefale som du ser på disse to bøkene Hvis du kommer til å jobbe med R. One av dem er den offisielle R nybegynner guide. Det vedlikeholdes av kjerne utviklerne av R. Du kan laste det ned på nytt, gratis lade og lovlig på at linken der. Alle disse lysbildene kommer til å gå opp på internett, på CS50 hjemmeside etter at dette er gjort. Så ingen grunn til å kopiere ting ned frantically. Den andre er en lærebok av Cosma Shalizi, som er en statistikkprofessor ved Carnegie Mellon, kalt Advanced Data Analyse fra en Elementary Point of View. Dette er ikke først og fremst en R bok. Det er en statistikk bok og det er en dataanalyse bok. Men det er svært tilgjengelig for folk som har et minstemål av statistikk kunnskap. Jeg har aldri tatt en formell kurs. Jeg bare vet biter fra ulike allierte fag at jeg har tatt kurs i. Og jeg var i stand til å forstå det helt bra. Alle tall er oppgitt i R. De er laget i R og de har også en kode oppføringer under hver figur som forteller deg hvordan du gjør hver figur med R-kode. Og det er veldig nyttig hvis du prøver å etterligne noen figuren du ser i en bok. Og igjen gratis nedlasting stat.cmu.edu/cshalizi/ Sorry, som bør kutte tilde cshalizi. Jeg skal sørge for å rette opp dette når de offisielle lysbilder gå opp. / ADAfaEPoV som er akkurat den akronym av boktittelen. Så generelt caveats-- R har mange evner. Jeg bare kommer til å være i stand til å dekke overflaten av en rekke ting. Også den første delen av seminaret kommer til å være noe av en data dump. Jeg er ganske lei for det. I utgangspunktet kommer jeg til å introdusere deg til en masse ting rett utenfor balltre, går så fort som mulig. Og så får vi den morsomme delen, som er demo hvor jeg kan vise deg alt at vi har snakket om på skjermen. Og du kan spille rundt på egen hånd. Så det kommer til å bli mye tekniske ting kastet opp på her. Ikke bekymre deg om å kopiere alt ned. Fordi A, kan du få all den ting på CS50 nettsiden senere. Og B, er det egentlig ikke så viktig å huske dette fra lysbildene. Det er viktigere at du får noen intuitive anlegg med det og som kommer fra bare spille rundt. Så hvorfor bruke R? I utgangspunktet, hvis du har et prosjekt som innebærer gruvedrift store datasett, data visualisering, du bør bruke R. Hvis du er gjør kompliserte statistiske analyser, det ville være vanskelig å i Excel, for eksempel, det ville også bra-- også hvis du gjør statistisk analyse som er automatisert. La oss si at du vedlikeholde et nettsted. Og du vil lese serverloggen hver dag og kompilere noen liste, som de beste landene som brukerne kommer fra, noen sammendrag statistikk på hvor lenge de bruker på din nettside eller hva. Og du vil kjøre dette hver dag. Nå hvis du gjør dette i Excel, du måtte gå til serveren din logg, importere denne inn i en Excel data regneark, kjøre hele analysen manuelt. Med R, kan du bare skrive ett skript. Planlegge det å kjøre hver dag fra operativsystemet. Og så hver kveld kl 02:00, eller når du planlegger det å kjøre, det vil se gjennom din Internett-trafikken for den dagen. Og så ved neste dag, vil du har denne skinnende, nye rapporten eller hva med alle de informasjonen du har bedt om. Så i utgangspunktet R er for Cisco programmering versus Cisco analyse. Foreløpig er gjort. La oss komme inn i de virkelige tingene. Så det er tre virke typer i språket. Det er numerisk type. Det er liksom en forskjell mellom heltall og flytende poeng, men egentlig ikke. Det er et tegn skriver, som er strenger. Og det er en logisk skriver, som er Booleans. Og du kan konvertere mellom typer ved hjelp av disse funksjonene som numerisk, som karakter, som logisk. Hvis du ringer, for eksempel, som numerisk på en snor, det vil prøve å lese at strengen som et tall, på samme måte at a2i og scanf gjøre, og C. Hvis du kaller som numerisk på sant eller usant som blir konvertert til en eller 0. Hvis du ringer som karakter på noe det vil konvertere denne til en strengrepresentasjon. Og så er det vektorer og matriser. Så vektorer er i utgangspunktet 1 dimensjonale arrays. De er det vi kaller arrays i C. matriser, 2 dimensjonale arrays. Og deretter høyere dimensjonale arrays du kan har 3, 4, 5 dimensjoner eller hva av numeriske verdier, strenger, logiske verdier. Du har også lister som er en slags assosiativ array. Jeg skal gå inn på det litt. Så en viktig ting som felte folk opp i R er at det ikke er noen virkelige, rene atomtyper. Det er ingen faktiske skillet mellom et tall, som en numerisk verdi, og en liste med numeriske verdier. Numeriske verdier er faktisk den samme som vektorer av lengde en. Og dette har en rekke viktige implikasjoner. En, betyr det at du kan gjøre ting veldig lett som involverer som å legge et nummer til en vektor. R vil i utgangspunktet figur ut hva du mener med det. Og jeg får til det i et sekund. Det betyr også at det er ingen måte for typen checker-- i den grad at noe sånt eksisterer i r-- å fortelle når du har passert i enkeltverdi når det forventer en matrise eller vice versa. Og det kan føre til at noen odde problemer som jeg kjørte inn når Jeg brukte R under min sommerjobb. Og det er ingen blandet type matriser. Så du kan ikke ha en rekke var det første elementene er, vet jeg ikke, strengen "John" og andre element er nummer 42. Hvis du prøver å gjøre det, så vil du få alt bare konvertert til en streng. Så vi har streng John, string 42. Så uvanlig syntaktisk features-- mest av R syntaks er svært lik C. Det er noen viktige forskjeller. Typing er veldig svak. Så det er ingen variabeldeklarasjoner. Overdragelse bruker merkelig error operatør mindre enn bindestrek. Kommentarer er med hash mark. Jeg antar nå dagene vi kaller det hashtag men det er egentlig ikke accurate-- ikke dobbel skråstrek. Modulære rester er med %% tegn. Heltallsdivisjon er med% /% som er veldig vanskelig å lese når det er anslått opp på skjermen. Du kan få områder av heltall med kolon. Så 2,5 vil gi deg en vektor av alle tallene 2 til 5. Arrays er ett indeksert, som skruer mye folk opp hvis de er fra mer typiske programmeringsspråk, som C, hvor de fleste ting er null-indeksert. Igjen, dette er hvor R arv som et språk for som ikke profesjonelle programmerere kommer inn. Hvis du er en sosiolog eller en økonom eller noe og du prøver å bruke R i utgangspunktet som et supplement til viktigere faglige arbeidet, du kommer til å finne one-indeksering litt mer naturlig. Fordi du begynne å telle på en i hverdagen, ikke 0. For-løkker, er denne lik foreach konstruere i PHP, som du får til lære in-- ganske snart. Som er for verdi i vektor og så kan du gjøre ting med verdi. PUBLIKUM: Det er å komme opp i forelesningen. CONNOR HARRIS: Å, det er komme opp forelesning, utmerket. PUBLIKUM: Oppdraget, er det skal peke fra høyre til venstre? CONNOR HARRIS: Fra høyre til venstre, ja. Du kan tenke på det som verdien på høyre dyttet inn i variabelen til venstre. PUBLIKUM: OK. CONNOR HARRIS: Og til slutt funksjonen syntaks er litt rart. Du har funksjonen navnet foo, tildelt til dette søkeordet funksjon, etterfulgt av alle argumentene og deretter delen av funksjon etter at. Igjen disse tingene kan virke litt rart. De vil bli andre natur etter du arbeider med språket for litt. Så vektorer, måten du konstruere en vektor er du type C, som er et nøkkelord, og deretter alle numrene du vil eller strenger eller hva. Argumenter også være vektorer. Men den resulterende matrisen blir flat. Så du kan ikke ha arrays der noen elementer er enkle tall og noen elementer er arrays selv. Så hvis du prøver å konstruere en rekke var det første elementet er 4 og det andre element er matrisen 3,5 du vil bare få en tre elementer array, 4,3,5. De kan ikke være av blandet type. Hvis du prøver å lese eller skrive utenfor grensene av en vektor du får denne verdien kalles NA en som står for en manglende verdi. Og dette er ment for som statistikere som arbeider med ufullstendige datasett. Hvis du bruker en funksjon som er ment å ta bare ett nummer til en matrise så hva du får er, jo Funksjonen vil kartlegge over array. Så hvis din funksjon la oss si tar et tall og returnerer den firkantede. Du bruke det til rekken 2,3,5 Det du får er matrisen 4,9,25. Og det er svært nyttig fordi det betyr at du trenger ikke å skrive for looper for gjør veldig enkle ting som å påføre en funksjon til alle medlemmer av et datasett. Som hvis du arbeider med store datasett, må du gjøre mye. Binære funksjoner er anvendt oppføring ved innreise. Jeg skal gå inn på det. Du får tilgang til dem med matriser eller vektorer med hakeparenteser. Så vektor navn hakeparentes 1 vil gi deg det første elementet. Vector navn klammer 2 vil gi deg det andre elementet. Du kan passere på en vektor indekser og du vil komme tilbake ut i utgangspunktet en sub faktor. Så du kan gjøre vektor navn brak C, 2,4 og du får ut en vektor som inneholder den andre og fjerde elementer i matrisen. Og hvis du bare ønsker en rask oppsummering statistikk av en vektor som interkvartilt rekkevidde, median, maksimum, uansett, du kan bare skrive sammendrag vektor navn og få det ut. Det er ikke veldig nyttig i programmering, men hvis du spiller rundt datasettene, er det praktisk. Matrices-- utgangspunktet høyere dimensjonale arrays. De har denne spesielle notasjon syntaks. Matrise med en matrise som får fylt in-- beklager, matrise med data, antall rader, antall kolonner. Når du har noen data, fyller det i matrisen i utgangspunktet kommer fra topp til bunn først. Deretter til venstre mot høyre. Så sånn. Og R har innebygget matrise multiplikasjon, spektral nedbryting, diagonalisering, en masse ting. Hvis du ønsker høyere dimensjonale matriser, så 3, 4, 5, eller hva dimensjonene du kan gjøre det. Syntaksen er rekke dim lik c, da listen over dimensjonene. Så hvis du vil ha en fire dimensjonal array med dimensjoner 4, 7, 8, 9, matrisen, dim lik c (4,7,8,9). Du får tilgang til enkeltverdier med brak første oppføringen komma andre oppføring. Du kan få hele skiver rader eller kolonner. Med denne ufullstendig syntaks er det bare radnummer komma eller komma kolonne Antall. Så lister er en slags assosiert array. De har sin egen syntaks her. Igjen ikke febrilsk kopiere alt dette ned. Dette er bare slik at folk går gjennom lysbildene senere har alt dette i en fin referanse. Og dette vil bli veldig naturlig når Jeg faktisk gå gjennom demoene. Så viser en i utgangspunktet knyttet arrays. Du får tilgang til verdier med listenavn, dollartegn, nøkkel. Så hvis listen er oppkalt foo, så kan du få tilgang til det sånn. Du kan få en hel nøkkel-verdi-par ved å passere i hakeparentes indeksen. Hvis du leser fra en ikke-eksisterende tasten, får du null. Det vil ikke feil. Saken er, R vil gjøre som mye med null som mulig. Og dette kan bety at hvis du er ikke ventet å få null ut av noen liste lese, vil du få noen uforutsigbare feil lenger ned køen. Dette skjedde med meg min sommerjobb da jeg var med R hvor jeg forandret hvordan en viss Listen ble definert på ett sted men ikke endre senere på kode som leser verdier fra den. Og så det som skjedde var jeg var lesing nullverdier ut av denne listen, passerer dem inn funksjoner, og blir veldig forvirret da jeg fikk alle slags tilfeldige infinities beskjæring opp i denne funksjonen. Fordi hvis du bruker visse maksimums eller minimumsfunksjoner til null, du får uendelig verdier ut. Datarammer, de er en underklasse av listen. Hver verdi er en vektor av samme lengde. Og de er vant til å presentere, utgangspunktet, datatabeller. Det er denne initialisering syntaks. Dette vil alt nytt, være mye klarere når du kommer til demo. Og det fine med datarammer er at du kan gi navn til alle kolonnene og navnene til alle radene. Og så gjør tilgang dem litt vennligere. Også dette er hvordan de fleste funksjoner som lese i data fra Excel regneark eller fra tekstfiler, for eksempel, vil lese inn sine data. De vil sette den inn en slags dataramme. Så functions-- funksjonene Syntaksen er litt rart. Igjen er det navnet på funksjonen, tildele, dette søkeordet funksjon og deretter listen over argumenter. Så er det noen fine ting om hvordan funksjonene fungerer her. For en, kan du faktisk tildele standardverdier for visse argumenter. Så du kan si R1 equals-- du kan si foo er en funksjon hvor R1 er lik noe som standard hvis brukeren angir ingen argumenter. Ellers er det hva han satt i. Og dette er veldig praktisk fordi mange av våre funksjoner har ofte flere titalls eller hundrevis av argumenter. For eksempel de som for plotting grafer eller plotting spredningsplott har argumenter som styrer alt fra tittelen og aksen etiketter, til fargen på regresjonslinjer. Og så hvis du ikke vil å få folk til å spesifisere hver eneste en av disse hundrevis av argumenter kontrollere hvert eneste aspekt av en tomt eller en regresjon eller hva, det er fint å ha disse standardverdiene. Og da kan du faktisk skrive som du så tilbake hit. Eller finne et bedre eksempel. Når du ringer funksjoner kan du faktisk kalle dem ved hjelp av argumentnavn. Så her er et eksempel på matrisen konstruktøren. Det tar tre argumenter. Vanligvis har du data, som er en vektor. Du har N rad, noe som er antall rader. Du har N cols-- antall kolonner. Saken er hvis du skriver N rad lik uansett og N col lik uansett når du ringer denne funksjonen, du faktisk kan reversere dem. Så du kan sette N col først og N rad sekund, og det vil gjøre noen forskjell. Så det er en fin liten funksjon. Gjorde import og eksport. Dette kan gjøres, i utgangspunktet. Det finnes også fasiliteter for å skrive ut vilkårlig R objekter til en binærfil og deretter lese dem tilbake senere. Som er praktisk hvis du gjør en stor interaktiv sesjon R og du må spare ting veldig raskt. Som standard R har en arbeidskatalog at filene blir skrevet ut i og lese tilbake i fra. Du kan se at med getwg, endre det med setdw. Ingenting spesielt interessant her Så nå selve statistikken stuff-- multilinear regresjon. Så den vanlige syntaksen er litt komplisert. Modellen er et stort objekt i utgangspunktet. Det blir tildelt lm, som er en funksjon. Det første elementet, y tilde x1 pluss uansett. Min syntaks her er litt forvirrende. Jeg er ganske lei meg, dette er den vanlige måten at informatikk bøker gjør dette. Men det er litt rart. Så i utgangspunktet er det lm parentes, første elementet er variable-- beklager, avhengig variabel tilde x1 pluss x2 pluss men mange uavhengige variabler du har. Og så disse kan enten være vektorer, alle samme lengde. Eller de kan være kolonne overskrifter i en dataramme at du bare angir i andre argument dataramme. Du kan også angi en mer kompleks formel slik at du ikke trenger å lineært regress en avhengig variabel, eller én vektor på en pre-eksisterende vektor. Man kan gjøre, for eksempel en vektorkomponent y squared pluss 1 og regress som mot logge av noen andre vektor. Du kan skrive sammendrag av modell med denne kommandoen kalles summary-- bare sammendrag Parens modell. Igjen noe annet jeg bør avklare. Noe annet som vil bli korrigert når lysbildene gå opp på internett. Hvis du bare ønsker å beregne en enkel korrelasjon du kan bruke korrelasjon vektor En vektor to funksjon kjerne. Metoden er som standard Pearson korrelasjoner. De er de standard som du kan gjøre. Det også Spearman og Kendell korrelasjoner som er litt variasjon av stigende rekkefølge korrelasjon. Vel de ikke beregne produkt øyeblikkene mellom vektorene selv, men av vektor rang bestillinger. Jeg skal forklare det senere. PUBLIKUM: Quick spørsmålet CONNER HARRIS: Sure. PUBLIKUM: Så når du beregne for de enkle korrelasjoner gjøre du antar at det er en statistisk betydning for korrelasjonen? CONNER HARRIS: Du trenger ikke å. En lm er i utgangspunktet bare en maskin. Det vil ta to ting og det vil spytte ut koeffisienter for best mulig passform linjen. Den rapporterer også standard feil på disse koeffisientene. Og det vil fortelle deg, som er den skjærings statistisk signifikant eller forskjellen fra 0. Er helningen av de beste fit linje statistisk forskjellig fra null, et cetera. Så det foruts ingenting, tror jeg er beste svaret på spørsmålet ditt. OK. Plotting-- så den viktigste grunnen til at du bør bruke R, som multilinear regresjon. I utgangspunktet alle språk har noen anlegg for det. Og ærlig R syntaks for regresjon er litt uforståelige. Men plotting er der det virkelig skinner. Arbeidshesten funksjonen er tomt og det tar to vektorer, x og y. Og så ellipser står for en svært stort antall valgfrie argumenter som kontrollere alt fra titler til farger av ulike linjer eller ulike punkter, til type plottet. Du kan ha scatter tomter eller linje plott. [Uhørbart] 2 vektorer av samme lengde. Du kan gå forut for dette med feste dataramme i skriptet. Og dette vil la deg bare bruke kolonne overskrifter i stedet for separate vektorer. Du kan legge best tilpassede linjer og lokal regresjonskurver til diagrammet. Disse kommandoene oppført her, ab linje og linjer, som standard disse få skrevet inn i pop up-vinduer fordi det forutsetter at du bruker R interaktivt. Hvis du ikke er mulig skrive to filer som er i virkelig alle formater du ønsker. Sorry, jeg har en skrivefeil jeg bare realisert. Hvis du ønsker å åpne en annen grafisk enhet du kan bruke denne funksjonen kalles PNG eller JPEG eller en rekke andre bildeformater. Og du kan skrive grafer til hva filnavnet du angir. For å avbryte at du må use-- Jeg skrev ikke dette i slide-- men det er en funksjon som heter dev dot off som tar ingen argumenter. Så er det fasiliteter for 3D plotting og for kontur plotting Hvis du ønsker å gjøre grafer av to uavhengige variabler. Jeg vil ikke komme inn disse akkurat nå. Det er også noen fasiliteter for animasjon de er vanligvis vedlikeholdes av tredjeparter. Jeg har gjort animasjoner med R grafer, men jeg har ikke brukt disse tredjeparts bibliotekene. Så jeg kan egentlig ikke attest til hvor gode de er. Hva jeg anbefale hvis du ønsker å lage animasjoner ved hjelp av R er at du kan skrive ut alle rammene for animasjonene og deretter kan du bruke en tredjepart program-- typisk de kalles FFmpeg eller ImageMagick-- å sy alle dine rammer i ett animasjon. Så tid for demo. Så hvis du bruker noen Unix lignende system som er Linux BSD, men som bruker BSD. OS X åpner du et terminalvindu og Type R i ledeteksten. Hvis du har R studio eller lignende, som også fungerer. For Windows-brukere bør du være i stand til å finne R på Start-menyen. Det bør bli kalt noe som R x64 tre poeng uansett. Åpne den opp der. Så nå la meg bare åpne et terminalvindu. Greit, søk. PUBLIKUM: Command-Space CONNER HARRIS: Command-Space, takk. Jeg vanligvis ikke bruker Mac. Terminal, viser nytt vindu. New window er innstillinger grunnleggende, R. Så du bør få en velkomstmelding, noe som dette. Så jeg bruker R interaktivt. Du kan også skrive R scripts selvfølgelig. I utgangspunktet skript kjøres nøyaktig samme måte som Hvis du sitter ved datamaskinen skriver i hver linje én om gangen. Så la oss starte med å lage en vektor. En pil C 1, 2. 1, 2, 4. Ok sikkert. Jeg kan lage skriftstørrelsen større. PUBLIKUM: Command-Plus CONNER HARRIS: Command-Plus. Command-Plus. Greit, hvordan det? God? OK. Så la oss begynne med erklære en vektor listen. Gjør en, pil, C 1,2,4. Vi kan se en. Ikke bekymre deg om braketten der. Konsollene er så hvis du skriver ut svært lange arrays, kan vi hvor du er. Ett eksempel ville være hvis jeg bare ønsker range 2-200. Hvis jeg skrevet en veldig lang rekke, brakettene er bare slik at jeg kan holde styr på hvilken indeks vi er på hvis jeg ser gjennom dette visuelt. Så uansett, har vi en. Så jeg sa før at arrays samhandle meget pent med, for eksempel, enhetlige operasjoner som dette. Så hva du tror jeg vil få hvis jeg skriver et pluss 1? Jepp. Høyre, nå skal jeg gjøre dette annerledes array. La oss si b c 20,40, 80. Så hva tror du denne kommandoen vil gjøre? Legg elementene. Og så i utgangspunktet det er hva det gjør. Så dette er ganske praktisk. Så jeg hva jeg gjør dette. c er, la oss si, 6 ganger 1 til 10. Så hva ønsker jeg å se inneholdt, tror du? Slik at alle multipler av seks. Nå, hva tror du vil skje hvis jeg gjør dette? Jeg skal gjøre dette litt klarere, c, c. Så hva skjer, gjør du tror, ​​hvis jeg gjør dette? et pluss c. [Uhørbart] PUBLIKUM: Enten en feil eller det legger bare de første tre elementene. CONNER HARRIS: Ikke helt. Dette er hva vi fikk. Hva som skjer er en kortere array, en, fikk syklet. Så fikk vi 124, 124, 124. Yeah. Og i utgangspunktet, kan du vise dette problemet før, en pluss en, som en underklasse av denne atferden, der den korteste matrise er bare antall 1, som er et en elementsats. Jeg bare være å si vektor alle tiden i stedet for matrisen, fordi det er hva r dokumentasjon vanligvis gjør. Det er en inngrodd c vane. OK, og så nå har vi denne matrisen. Så har vi denne tabellen, c. Vi kan få oversikt statistikk på c, sammendrag c. Og det er fint. Så nå la oss gjøre noen matrix ting. La oss si at m er en matrise. La oss gjøre det en tre og tre en. Så nrows er lik 3, og ncols er lik tre. Og for data la oss do-- så hva tror du dette kommer til å gjøre? Rett, det er den neste. Det er nrow og ncolumn. Så det jeg har gjort er at jeg har erklært en tre og tre matrise og jeg har gått i en ni-element array. Så logaritmen av alle elementer ett til ni. Og alle disse verdiene fylle opp array-- beklager? PUBLIKUM: De er grunn 10 loggene? CONNER HARRIS: Nei, log naturlige logaritmer, så basen e. Ja, hvis du ønsket basen 10 log, tror jeg du ville ha logge uansett, dividert med log 10. Og så dataene til [uhørbart] bare fylles opp matrisen, slik at toppen til bunnen, deretter til venstre til høyre. Og hvis du ønsket å gjøre noe annet array, la oss si n er matrise. La oss gjøre, jeg vet ikke, fra 2 til 13 år. Eller skal jeg gjøre noe mer interessant. Jeg skal gjøre 2 til 4. nrow tilsvarer, la oss si, tre. Ncol tilsvarer fire. n. Så vi har fått dette. Og nå, hvis vi ønsker å multiplisere disse, vi ville gjøre n prosent ganger prosent, fordi det er n. Og vi har matrix produkter. Av de måte, fikk du se hvordan da jeg erklærte n, den 2 til 4 vektor fikk syklet før det fylt opp alle n? Hvis du ønsket å ta egenverdi nedbryting, dette er noe vi kan gjøre veldig enkelt. Vi kan gjøre eigen n. Og så dette er vår første møte med en liste. Så eigen n er en liste med to nøkler. Verdier, som er denne matrisen her. Og vektorer, som er denne matrisen her. Så hvis du ønsket å trekke ut, si, denne tredje kolonnen fra egenvektorer matrise, fordi egenvektorene er kolonnevektorer. Så vi kan gjøre vec eigen n dollartegn vektorer, komma tre, av [uhørbart]. Vec. Er det, som du kanskje forventer. Da si n ganger prosent ganger vec. Så resultatet her absolutt ser ut som hvis vi tok den tredje egenverdien her, som tilsvarer den tredje egenvektor. Det bare ganget alt i denne egenvektor, komponent-messig, av egenverdien. Og det er det vi forventer, fordi det er det egenverdier er. Har noen her ikke tatt lineær algebra? Et par mennesker, OK. Bare slå hjernen av for en bit. Og ja hvis vi tar eigen n dollar sign verdier 3 ganger VEC, godt få det samme. Det er formatert annerledes som en rad vektor i stedet for en kolonnevektor, men big deal. Og så de er i utgangspunktet den fine ting som vi kan gjøre med matriser, demonstrert lister. Jeg skal demonstrere fint ting om funksjoner i tillegg. Så la oss say-- [uhørbart] funksjon, la oss kalle det func mot funksjon n n squared-- faktisk, det er egentlig ikke det beste. a, b, en kvadratisk pluss b. Så en ting om funksjoner, igjen, er de trenger ikke eksplisitte retur uttalelser. Så du kan just-- den siste setningen evalueres vil være den uttalelsen tilbake, eller verdien som returneres. Så i dette tilfellet, vi bare evaluere en setning, en squared pluss b. Det vil være standardreturverdi. Det gjør vondt aldri å sette i returnere verdier eksplisitt, spesielt hvis du arbeider med en funksjon av svært komplisert logikk strømme. Men du trenger ikke dem. Så nå kan vi gjøre func 5, 1, og dette er egentlig hva du forventer. Noe annet vi kan gjøre, vi kan faktisk gjøre func b er lik 1, a er lik fem. Så hvis vi spesifiserer hvilket nummer her, som argument går som argument i funksjonen, kan vi snu rundt disse verdiene uansett hvor vi vil. PUBLIKUM: Er det en grunn å skrive det ut med b lik i motsetning til bare å bruke tallene og komma? CONNER HARRIS: Ja, vanligvis gjøre dette hvis du har funksjoner med en rekke argumenter. Det kan ofte være like flagg som du ville bare vil bruke i sjeldne tilfeller. Og på denne måten kan only-- deg kan referere til de spesifikke argumenter som du ønsker å bruke ikke-standardverdier for, og du trenger ikke å skrive ut en haug med flagg tilsvarer falsk etter dem. Eller jeg kan skrive dette på nytt med en standardverdi som b er lik to. Og så kunne jeg gjøre f func, Jeg skal gjøre fire, en denne gangen. Og 17, som er 4-squared pluss 1, som du kanskje forventer. Men jeg kunne også bare kaller dette med func 4, og jeg får 18, fordi Jeg spesifiserer ikke b. Så b får standardverdien for to. OK, så nå hvis du er følgende sammen med demoen, skriver denne linjen på din kommando spør og se hva som kommer opp. Egentlig ikke gjør det. Skriver dette. Du bør få noe som dette. Så mtcars er en innebygd data satt for denne demonstrasjonen formål som kommer with-- som kommer i som standard med r distribusjon. Dette er en samling av statistikk fra en 1974 utgave av Motor Trend magasin på en rekke forskjellige bilmodeller. Så det er miles per gallon, cylinders-- Jeg glemmer hva disp er-- hestekrefter. Antagelig. Hvis du bare Google MT biler, da en av de første resultatene vil være fra offisielle r dokumentasjon og det vil forklare alle disse datafeltene. Så vekt er-- wt er vekten av bilen i tonn. Q sek er kvart mile tid. Så nå kan vi gjøre noen morsomme ting om MT biler er et datafelt. Så vi kan gjøre ting som radnavnet, mt biler. Og dette er en liste over alle radene i datasettet som er navnene på biler. Vi kan gjøre colnames, MT biler dette. Hvis du gjør mt biler, sub-numerisk indeks, som 2. vi får den andre kolonnen av dette, noe som ville være sylindre. PUBLIKUM: Hva gjorde du? CONNER HARRIS: jeg skrev mt biler, brak e, som ga meg den andre kolonne av mt biler. Eller hvis vi ønsker en rad, kan jeg skrive mtcars komma 2, for eksempel. Andre runde to komma, sånn. Og som går på rad din. Dette her bare gir deg en kolonne, men kolonnen som en vektor. Jeg innså nå jeg glemte å demonstrere noen kule ting om vektorer som du kan gjøre med indekser. Så la meg gjøre det akkurat nå. Så la oss gjøre c gets-- sette dette på pause-- 2 ganger 1 til 10. Så c er bare kommer til å være vektoren 2 til 20. Jeg kan ta elementer som dette, c2. Jeg kan passere i en vektor som dette, c-- la meg bruker annet navn enn c, som vec c. I utgangspunktet, jeg gjør dette slik at du ikke får forvirret mellom c som en vektor konstruksjon funksjon, og deretter c som en variabel navn. Mer brak c 4, 5, 7. Dette får meg ut den fjerde, femte, og syv elementer i matrisen. Jeg kan gjøre vec, satt i en negativ indeksen, som negativ fire. Som vil få meg ut av dette med det fjerde elementet fjernes. Så hvis jeg ønsket å gjøre skiver, Jeg kan gjøre vec 2 til 6. 2 kolon 6 er bare en annen vektor, som er 2, 3, 4, 5, 6. Spytter ut det. Så uansett, tilbake til mt biler. Så la oss gjøre noen regresjoner. La oss si at modellen gets-- la oss lineært regress-- Jeg vet ikke. Først la oss ikke legge mtcars, selvfølgelig. Så [uhørbart] modell lm, la oss regress miles per gallon på tilde vekt. Og så dataramme er mtcars. Så sammendrag modell. OK, så dette ser litt komplisert. Men innerst inne, ser ut som om vi prøver å uttrykke miles per gallon som en lineær funksjon av vekt, da vi fikk denne linjen her, som avskjærer på 37.28. 37.28 ville være de teoretiske miles per gallon på en bil som veier null. Og så for hver ekstra tonn, du banke cirka fem miles per gallon ut av det. Begge disse koeffisientene dere kan se, standardfeil der. Og de er svært statistisk signifikant. Så vi kan være veldig sikker på å 1 e 10 til den negative 10. Så 1 ganger noe til negative 10, at hvis du gjør en tyngre bil, det vil ha dårligere miles per gallon. Eller vi kan teste noen andre modellen. Som i stedet for regresjon av denne på vekt, la oss regress det på logg av vekt, fordi kanskje den effektive vekt på kjørelengde er liksom ikke lineær. Dette ga oss en r squared av 0,7528. Så la oss prøve dette. Denne gangen la oss gjøre en annen variabel, også. Model2. Så sammendraget, Model2. All right, så igjen, vi fikk vår beste tilpasset linje her. Og dette tid-- dette sier, utgangspunktet at hver gang du øke vekten av en bil med en faktor på e du mister dette mange miles per gallon. Og så denne gangen vår gjenværende standard feil it-- det spiller ingen rolle, egentlig. Den gjenværende standard feil er utgangspunktet bare standard feil at du har igjen etter at du har ta bort trendlinjen. Og vår r squared her er 0,81, som er litt bedre enn hva vi hadde før, 0.52. Og så nå la oss legge til en begrepet til denne regresjon. Så la oss regress miles per gallon både på loggen av vekter og, la oss gjøre, q miles, kvart mile tid. OK, det må ha the-- all right, qsec. Qsec. Actually-- beklager, hva? La meg kalle dette noe andre foruten Model2. La meg kalle dette model3. Og så nå kan vi gjøre oppsummering model3. Og så igjen, dette er i utgangspunktet hva man kunne forvente. Du har positiv skjæringspunktet. Den effektive økende vekten er negativ. Og den effektive økende kvart mile tid er positive, men selv mindre enn vekt. Nå intuitivt, kan du få følelsen av dette ved å si tenke på sportsbiler. Det er en svært rask akselerasjon, en svært kort kvart mile ganger. De er også kommer til å bruke mer gass, mens mer fornuftige biler kommer å ha tregere akselerasjon, høyere kvart mile ganger, og bruke mindre gass ,, så høyere miles per gallon. Flott. Og så nå er det på tide å plotte noe sånt som dette. Så la oss do-- så nakent bein vi kan gjøre plots-- fordi jeg har lagt ved denne dataramme before-- vi kan bare gjøre tomter, vekt mpg. Gjør dette til en litt større. Der vi i utgangspunktet har en spredningsdiagram, men poengene er litt vanskelig å se på dette. Jeg husker ikke offhand hva Syntaksen er for å endre plottet. Så jeg tror dette vil være en god tid for å få opp, det er en veldig fin innebygd hjelp funksjonen, hjelpe sitater fungere navn. Vi vil bringe opp i utgangspunktet noe du ønsker. Jeg tror jeg vil faktisk gjøre dette typen er lik p for poeng plott. Visste at endre noe? Og nei, ikke egentlig. Greit. For noen grunn, da jeg gjorde dette på min egen datamaskin for en stund siden, alle scatter poeng var mye klarere. Anyhow, er scatter slags synlig? Det er en der. Noen der, noen der. Du kan liksom se dem, ikke sant? Så hvis vi ønsker å legge et best mulig passform linje på denne tomten her, som er litt nakent bones-- la meg gjøre det litt hyggeligere. Hoved tilsvarer versus vekt. Miles per gallon. Igjen, kan du se hvor nyttig valgfrie argumenter er her med også ikke å måtte sette ting i en bestemt rekkefølge med tastatur argumenter når du har tomter, fordi disse tar mye argumenter. XLAB lik vekt, vekt, tonn. Greit. OK, ja, denne enheten blir litt irriterende. Men du kan se liksom der oppe, det er en graf tittelen på siden. Over her there's-- på bunnen her er det akseetiketter. Jeg husker ikke offhand hva kommandoene ars-- hvilke funksjoner er å øke størrelsen på disse etikettene og titler, men de er der. Og så hvis vi ønsker å legge best mulig passform linje, vi kunne gjøre noe like-- jeg har syntaksen skrevet opp her. Så husker vi bare legge modellen var mpg, vekt, mtcars. Og så hvis jeg ønsket å legge et best mulig passform linje, kunne jeg gjøre a, b linje modell. Og boom, har vi et best mulig passform linje. Det er litt vanskelig å se igjen. Jeg er ganske lei meg om teknologiske vanskeligheter. Men det går i utgangspunktet øverst til venstre til nederst til høyre. Og hvis skalaen var større, kan du se at skjæringspunktet er det du kan finne fra sammendragsstatistikk hvis du skriver sammendrag modell. OK, så jeg håper alle får noe av en følelse av hva R er, hva det er godt for. Du kan gjøre langt bedre plott enn dette på din egen tid, om du vil. Så den utenlandske funksjon grensesnitt. Dette er noe som ikke er typisk dekket i innledende foredrag eller innledende noe for r. Det er ikke sannsynlig at du kommer til å trenge det. Men jeg fant det nyttig i mine egne prosjekter i fortiden. Og det er ingen god tutorial for det på nettet. Så jeg skal bare skynde deg gjennom hele denne og da er du fri til å forlate. Og så den utenlandske funksjon grensesnitt er hva du kan bruke til å ringe ut for å se funksjoner med en R. Internt R er bygget på C. R aritmetikk er bare C er 64-bit floating point aritmetikk, som er type dobbelt [uhørbart]. Og du vil kanskje gjøre dette for en rekke årsaker. For det er R tolkes, er det ikke kompilert ned til maskinkode. Så du kan skrive din indre sløyfer i C og deretter få fordelen med å bruke R. Som det er litt mer praktisk enn C. Den har bedre graf fasiliteter og whatnot. Og samtidig være i stand til å få toppfart ut av de indre sløyfer, som er der du virkelig trenger det. Gjenbruk av eksisterende C-biblioteker, det er også viktig. Hvis du har noen C-bibliotek for like, Jeg vet ikke, Fourier transformeres, eller noen veldig arkeikum statistikk prosedyre som brukes i høy energi astrofysikk eller noe, vet jeg ikke. Høy energi astrofysikk er ikke engang en tror, ​​tror jeg. Men du kan gjøre det i stedet for å måtte å skrive en innfødt R port av dem. Og på the-- og igjen, som om du ser i de fleste av R standardbiblioteker, på det innvendige, det innvendige er kommer til å bruke den utenlandske funksjon grensesnitt svært omfattende. De vil ha ting som Fourier forvandler eller databehandling korrelasjon koeffisienter skrevet i C, og de vil må bare R wrappers rundt dem. Grensesnittet er en litt vanskelig. jeg tenker dens vansker er overdrevet i en Mange av instruksjonene du finner. Men likevel er det litt forvirrende. Og jeg har ikke vært i stand til å finne en god tutorial for det, så dette er det akkurat nå. Igjen, dette hele segmentet er mer for senere bruk. Ikke bekymre deg om kopiering alt ned akkurat nå. Så følgende instruksjoner er for Unix-lignende systemer, Linux, BSD, OS X. Jeg vet ikke hvordan dette fungerer på Windows, men du bare ikke gjør din avsluttende prosjekt på Windows. Du egentlig ikke vil. Unix er mye bedre sett opp for casual programmering. Så, i utgangspunktet fremmed funksjon grensesnitt. Hvis du ønsker å skrive et C Funksjonen for bruk sammen med R, det har å ta alle argumenter som pekere. Så for enkeltverdier, dette betyr at det er pekt på verdien. For matriser, er dette en peker til det første elementet, hvilken er hva array-navn faktisk betyr. Igjen, dette er noe du bør ha pen helt ned etter p satt fem. Array navnene er bare pekere til det første element, Flyttallstypen er dobbel. Og din funksjon må returnere ugyldig. Den eneste måten at det kan faktisk fortelle R hva som skjedde er ved å endre minnet som R ga til det gjennom den utenlandske funksjon grensesnitt. Så jeg har skrevet denne eksempel her, er dette en funksjon som beregner bruken Punktproduktet av de to vektorer. Det tar to argumenter, vec1, vec2, som er de vektorer selv, og n, som er en lengde, fordi igjen, R har innebygget [uhørbart] for å finne ut lengden av vektorene, men C ikke. I C er en vilkårlig vektorer avgrenset del av minnet. Så på den måten du kan beregne punkt produkter er bare å sette dette ut parameter til null og deretter iterere gjennom fra en til stjerne n, fordi n er en peker til lengden, bare legge noe til dette ut parameter. Og det kan være god praksis Hvis du kommer til å gjøre dette for å skrive to separate C-funksjoner. En av dem has-- en av dem bare tar argumentene og hvilke typer at de vanligvis ville være i C. Så det tar en matrise argumenter som pekere. Men single-verdi argumenter som n, det bare tar som verdier av kopi, uten pekere. Og da er det ikke [Uhørbart] ut pekeren. Og så kan du ha en annen, i utgangspunktet, wrapper funksjon som i utgangspunktet håndterer kravene av utenlandske funksjon grensesnitt for deg. Måten du kaller dette i R er, når du har din funksjon skrevet i C, du skriver R cmd shlib, R kommando delt bibliotek, foo dot c, eller hva filnavnet er, og OS skallet ikke er i R-terminalen. Og dette vil skape en bibliotek kalt foo dot så. Og så kan du legge det i vår script eller interaktivt med kommandoen dyn prikk belastning. Så er det en funksjon i R kalles dot c. Dette tar argumenter som er første navnet til funksjonen i C som du vil ringe. Og deretter alle parametere til denne funksjonen, de må være i riktig rekkefølge. Du må bruke disse type tvang funksjoner som heltall, som double, som karakter, og som logisk. Og så når det returnerer liste, som igjen er bare en tilhørende rekke av parameternavn og verdier etter at funksjonen har kjørt. Så i dette tilfellet, fordi dot prod har argumenter vec1, vec2, og int n, n ut. Til prikk c vi har dot prod, navnet på funksjonen vi ringer, vec1, vec2, type tvinge. Lengden av hver vektor, Jeg valgte bare vec1 vilkårlig. Det ville være mer robust å si s heltall min lengde på vec1, lengde vec2. Så akkurat som dobbel null, fordi vi egentlig ikke bryr seg hva som går inn i utparameter fordi vi er å sette den til null uansett. Og så resultatene kommer til å være en big forbundet rekke utgangspunktet vec1 er hva, er vec2 uansett. Men vi er interessert i ut, slik at vi kan få det ut. Dette er igjen, en meget leketøy f.eks av et fremmed funksjon grensesnitt. Men hvis du må beregne dot produkter av massive vektorer i sløyfer, eller hvis du trenger å gjøre noe annet i en løkke, og du ikke ønsker å stole på R, som har en bit av overhead bygget inn i den, kan dette være nyttig. Igjen, dette er ikke vanligvis en innledende emne til R. Det er ikke godt dokumentert. Jeg bare inkludert det fordi Jeg fant det nyttig i det siste. Så dårlig praksis. Jeg nevnte at det er en for loop i funksjonen. Vanligvis bør du ikke, i språket, ikke bruke den. Basert på hvor R implementerer køyring internt, kan det være treg. De bare ser også stygg. R håndterer vektorer veldig pent, så ofte du ikke trenger å bruke den. Deretter kan du vanligvis erstatte en vektor ofte med disse funksjonene kalles høy bestillingsfunksjoner, kart, Redusere, Finn, eller Filter. Jeg vil bare gi noen eksempler på hva disse gjør. Kartet er en høyere ordens funksjon fordi det tar en funksjon som et argument. Så du kan gi den en funksjon, du kan gi den en matrise, og det vil gjelde funksjonen til hvert element i matrisen og returnere det nye utvalget. Reduser, i utgangspunktet du gi det en rekke, gir du det en funksjon som tar to argumenter. Det vil gjelde funksjonen først, første argumentet med noen startverdi. Så til at resultatet i andre. Så til at resultatet i tredje, deretter til at resultatet i fjerde. Og så tilbake når det blir til slutt. Så for eksempel, hvis du ønsker å beregne summen av alle elementene i en matrise, enn du kan kalle redusere med [uhørbart] redusere et tillegg funksjon, som func a, b, returnere en pluss b. Og deretter starte en verdi på 0. Og alle disse, kan du finne dem beskrevet i R dokumentasjon, i noen lærebok i funksjonell programmering. Det er også denne klassen av funksjoner kalt gjelder funksjoner, som jeg don't-- de er litt vanskelig å forklare, men hvis du ser på [uhørbart] bestilt som jeg siterte i begynnelsen, Han forklarer dem ganske godt i blindtarmen på R programmering. Mer om praksis, føye til vektorer. Yeah? Jeg tror jeg skal rette opp dette. I den første linjen, vec pil, at pilen skal ikke være der. Du kan tildele en vektor, på nytt, ved å ta dens lengde pluss ett og tildele noen verdi for det. Som vil utvide vektoren, eller kan gjøre VEC tilsvarer c, vec NewValue. Igjen, hvis du bruker C med ett argument som en vektor, den resulterende hierarkiet blir flat. Så vil du bare få en vektor som er forlenget med ett. Aldri gjør dette. Grunnen til at du bør ikke gjøre dette på er dette. Når du tildele en vektor, det gir den en viss mengde minne. Hvis du øker som vektor størrelse, det har å omdisponere vektoren et annet sted. Og så omfordeling er ganske dyrt. Jeg vil ikke gå inn i detaljer om hvordan minne allocators er implementert på operativsystemnivå, men det tar mye tid å finne en ny del av minnet. Og også, hvis du er re-allokere mye og mange av stadig større biter, ender du opp med noe som kalles minne fragmentering, hvor det tilgjengelige minnet er delt inn i mange små blokker i minne allocators synspunkt. Og det blir vanskeligere og vanskeligere å finne minne for andre ting. Så i stedet, hvis du trenger å gjøre dette, hvis du trenger for å vokse en vektor fra den ene enden til den neste, i stedet for å føye til den hele tiden, bør du forhånds fordele det. Vec pil, vektorlengden lik 1000, eller hva. Og så kan du bare tildele til vektoren verdier man en tid etter at du har tildelt det en gang. Jeg løp inn i dette, igjen, min sommerjobb da jeg skrev NRA differensial ligningsløseren. Ikke symbolsk numerisk. Tanken er at når du har én verdi for din løsning, du bruke den til å beregne den neste. Så min naturlige naive tilbøyelighet var å si OK, så jeg skal begynne med en vektor det er en betydelig verdi. Beregn fra at den neste verdien som går inn på min løsning vektor, og legge det. Lag noe annet, føyer det. Det gikk veldig, veldig sakte. Og når jeg innså dette og jeg endret mitt system fra føye til denne vektoren som 10.000 til 100 000 ganger, å bare pre-tildeling av en vektor og bare kjøre med det. Jeg fikk mer enn 1000 fold fart opp. Så dette er en svært vanlig felle for R programmering. Hvis du trenger å bygge opp en vektor bit for bit, pre-fordele den. En annen vanlig tur opp-- dette er min siste slide, ikke worry-- er feilbehandling. R, for å være ærlig, ikke virkelig gjøre dette veldig bra. Det er mange av problemer som kan beskjære opp. For eksempel, hvis du får en matrise eller en vektor ut av funksjon at du ventet en enkelt verdi å komme fra, eller vice versa, og du passerer det inn en funksjon som du skrev venter en enkelt verdi, som kan være et problem. Enkelte funksjoner returnere null som gjør, sier, leser fra en ikke-eksisterende nøkkelen i en liste. Men null er ikke som C der hvis du forsøker å lese fra en gammel pekeren, [uhørbart] å nullpeker, det bare SEG feil og hvis du er i din debugger det forteller deg nøyaktig hvor du er. I stedet, null vil do-- funksjoner vil gjøre uforutsigbare ting hvis de er overlevert null. Som hvis du er levert max null, det vil gi deg negative uendelig. Og så, ja. Og så skjedde dette til meg en gang da jeg hadde endret en haug med felt i min liste struktur gang uten å endre dem andre steder når jeg leste fra dem. Og så fikk jeg alle slags tilfeldig evighets resultater beskjæring opp og jeg aner ikke hvor de kom fra. Og dessverre, det er ingen reell R streng modus der du kan si om noe ser ut som det kan være en feil, bare stoppe der, så jeg kan være disiplinert og fikse det. Men det er noe kalt stopp hvis ikke. Dette tilsvarer Cs hevde, hvis du har snakket om det. Jeg tror ikke C hevde er et foredrag tema, men din seksjonsleder kan ha gått over det. Og stoppe hvis ikke i utgangspunktet tar noen predikat, så enhver uttalelse som kan være sant eller usant. Og hvis det er falsk, det stopper sitt program. Den forteller deg nøyaktig hva linje du var på, og hvilken tilstand mislyktes. Og dette svært nyttig, for eksempel, tilregnelighet sjekking, funksjons innganger. Så hvis du har en funksjon og du forventer, sier, hvis du skulle gi meg en date, jeg vil ha dato er bare en vektor av lengde 1 og et sted mellom 1 og 31. Og hvis ikke, jeg vet noe har gått galt. Og jeg velger å stoppe det før dette har tilfeldig banker på effekter med kode at det er vanskeligere å spore gjennom. Så det er en mulig bruke for stopp hvis ikke. Anyhow, OK. Så det er slutt. Tusen takk for at du kom. Jeg er en amatør på dette. Så beklager hvis du kjeder eller forvirret eller hva har du. Jeg er glad for å ta spørsmål via e-post på connorharris@college.harvard.edu. Dette gjelder også for alle ser dette live eller senere. Også, selv om jeg ikke er en TF, er jeg også veldig villig til å tjene som en uoffisiell rådgiver for alle som er ved hjelp av R i et avsluttende prosjekt. Hvis du ønsker til det, så bare snakk med din TF og deretter skrive meg en e-post så Jeg vet hva du jobber med og slik at jeg kan sette opp møtet ganger med deg hvis du vil. Så igjen, tusen takk. Jeg håper du likte den. PUBLIKUM: [uhørlig]. CONNER HARRIS: Selvfølgelig. PUBLIKUM: Hva slags prosjekt ville en CS student bruke R for? CONNER HARRIS: Så hvis du ikke gjør noe som er rent i data mining, for eksempel, og der er mange ting du kan gjøre med det med data gruvedrift og maskinlæring. Du ønsker kanskje å bruke R for en komponent av noe. Jeg tok opp, opprinnelig eksempelet av hvis du skriver en nettside og du vil kjøre automatisert statistisk analyse av serveren logger på et bestemt tidspunkt hver dag, det kan være noe som er veldig enkelt å gjøre i løpet av et kort R skript som du kan planlegge å kjøre hver kveld, for eksempel. Og jeg er sikker på, hvis det er noen grunn til at du vil Vil statistikk eller grafiske mulighetene og har denne kjøre automatisk i stedet for å måtte kommunisere med ting i Excel, for eksempel, det er noe kan det være lurt å bruke R for. Så noen flere spørsmål før jeg drar? Nei? Greit, vel, igjen, takk takk for at du kom.