1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Still jeg tror noen spennende video 3 00:00:07,690 --> 00:00:12,570 produsert av en profesjonell konsulent som bruker R mye i sitt arbeid. 4 00:00:12,570 --> 00:00:16,329 >> FORTELLER: Hva ligger bak statistikken, analytics, og visualiseringer 5 00:00:16,329 --> 00:00:19,770 at dagens smarteste dataforskere og bedriftsledere stole på 6 00:00:19,770 --> 00:00:22,012 å lage kraftige avgjørelser? 7 00:00:22,012 --> 00:00:23,540 Du kan ikke alltid se det. 8 00:00:23,540 --> 00:00:24,790 Men den er der. 9 00:00:24,790 --> 00:00:29,460 Det kalles R, r-- åpen kildekode statistisk programmeringsspråk 10 00:00:29,460 --> 00:00:32,630 at dataeksperter verdens over bruk for alt 11 00:00:32,630 --> 00:00:35,350 fra kartlegging bred sosial og markedsføring trender online 12 00:00:35,350 --> 00:00:39,210 å utvikle økonomiske og klima modeller som hjelper drive våre økonomier 13 00:00:39,210 --> 00:00:40,780 og lokalsamfunn. 14 00:00:40,780 --> 00:00:44,910 >> Men hva er egentlig R og hvor fikk R begynne? 15 00:00:44,910 --> 00:00:48,620 Vel opprinnelig startet R her med to professorer 16 00:00:48,620 --> 00:00:51,950 som ønsket en bedre statistisk plattform for sine elever. 17 00:00:51,950 --> 00:00:56,030 Så de skapt en modellert etter den statistiske språk S. 18 00:00:56,030 --> 00:01:00,480 De, sammen med mange andre, holdt arbeider på og bruke R, 19 00:01:00,480 --> 00:01:05,489 skape verktøy for R og finne nye applikasjoner for R hver dag. 20 00:01:05,489 --> 00:01:07,750 >> Takket være denne er verdensomspennende fellesskap innsats, 21 00:01:07,750 --> 00:01:11,850 R holdt vokser med tusenvis av brukeropprettede biblioteker bygget 22 00:01:11,850 --> 00:01:15,500 å forbedre R funksjonalitet og Publikum-hentet kvalitet validering 23 00:01:15,500 --> 00:01:19,740 og støtte fra de mest anerkjente industriledere i alle felt som 24 00:01:19,740 --> 00:01:25,040 bruker R. Og det er flott, fordi R er best på hva den gjør. 25 00:01:25,040 --> 00:01:28,540 Spirende eksperter raskt og lett å tolke, samhandle med, 26 00:01:28,540 --> 00:01:33,790 og visualisere data viser sin raskt voksende fellesskap av R brukere over hele verden 27 00:01:33,790 --> 00:01:36,380 og se hvordan åpen kildekode R fortsetter å forme 28 00:01:36,380 --> 00:01:39,340 fremtiden for statistisk analyse og data vitenskap. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, flott. 31 00:01:47,710 --> 00:01:50,360 Så min egen presentasjon vil være litt mer nøktern. 32 00:01:50,360 --> 00:01:54,380 Det vil ikke innebære at mye spennende bakgrunnsmusikk. 33 00:01:54,380 --> 00:01:59,160 Men som du så i videoen, er R sort av en generell programspråk. 34 00:01:59,160 --> 00:02:03,720 Men det ble opprettet hovedsakelig for statistisk arbeid. 35 00:02:03,720 --> 00:02:07,980 >> Så det er designet for statistikk, for dataanalyse, for data mining. 36 00:02:07,980 --> 00:02:12,420 Og slik at du kan se dette i en rekke de designvalg som skaperne av R 37 00:02:12,420 --> 00:02:13,320 gjort. 38 00:02:13,320 --> 00:02:15,472 Den er designet for stor grad, folk som ikke er 39 00:02:15,472 --> 00:02:17,930 eksperter i programmering, som er bare å plukke opp programmering 40 00:02:17,930 --> 00:02:23,460 på siden, slik at de kan gjøre sitt arbeid i samfunnsvitenskap eller i statistikk 41 00:02:23,460 --> 00:02:25,440 eller hva. 42 00:02:25,440 --> 00:02:27,850 >> Den har en rekke svært viktige forskjeller fra C. 43 00:02:27,850 --> 00:02:33,200 Men syntaks og paradigmer at den bruker er stort sett den samme. 44 00:02:33,200 --> 00:02:36,830 Og du skal føle pen mye hjemme rett utenfor balltre. 45 00:02:36,830 --> 00:02:38,520 Det er et viktig språk. 46 00:02:38,520 --> 00:02:40,260 >> Ikke bekymre deg for mye om det Hvis du ikke kjenner begrepet. 47 00:02:40,260 --> 00:02:42,676 Men det er en forskjell mellom imperativ, deklarative, 48 00:02:42,676 --> 00:02:43,810 og funksjonell. 49 00:02:43,810 --> 00:02:47,600 Maktpåliggende betyr bare du gjør utsagn som er utgangspunktet kommandoer. 50 00:02:47,600 --> 00:02:52,340 Og så tolk eller datamaskin følger dem én etter én. 51 00:02:52,340 --> 00:02:56,630 Det er svakt skrevet, er det ingen typen erklæringer i R. 52 00:02:56,630 --> 00:02:59,130 >> Og deretter linjene mellom ulike typer 53 00:02:59,130 --> 00:03:03,920 er litt mer løs enn de er i C, for eksempel. 54 00:03:03,920 --> 00:03:06,450 Og som jeg sa det er svært omfattende fasiliteter 55 00:03:06,450 --> 00:03:15,610 for å tegne grafer for statistiske analyse, for data mining. 56 00:03:15,610 --> 00:03:19,540 Disse er bygget inn i begge språk, og som videoen sa, 57 00:03:19,540 --> 00:03:23,680 tusenvis av tredjeparts biblioteker som du kan laste ned og bruke gratis 58 00:03:23,680 --> 00:03:25,340 med svært løs konsesjonsvilkår. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Så generelt, vil jeg anbefale som du ser på disse to bøkene 61 00:03:31,500 --> 00:03:34,610 Hvis du kommer til å jobbe med R. One av dem er den offisielle R nybegynner 62 00:03:34,610 --> 00:03:35,110 guide. 63 00:03:35,110 --> 00:03:38,660 Det vedlikeholdes av kjerne utviklerne av R. 64 00:03:38,660 --> 00:03:42,400 Du kan laste det ned på nytt, gratis lade og lovlig på at linken der. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Alle disse lysbildene kommer til å gå opp på internett, på CS50 hjemmeside 67 00:03:49,869 --> 00:03:50,660 etter at dette er gjort. 68 00:03:50,660 --> 00:03:53,690 Så ingen grunn til å kopiere ting ned frantically. 69 00:03:53,690 --> 00:03:56,800 >> Den andre er en lærebok av Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 som er en statistikkprofessor ved Carnegie Mellon, kalt Advanced Data 71 00:04:00,100 --> 00:04:02,160 Analyse fra en Elementary Point of View. 72 00:04:02,160 --> 00:04:04,010 Dette er ikke først og fremst en R bok. 73 00:04:04,010 --> 00:04:07,130 Det er en statistikk bok og det er en dataanalyse bok. 74 00:04:07,130 --> 00:04:11,990 Men det er svært tilgjengelig for folk som har et minstemål av statistikk kunnskap. 75 00:04:11,990 --> 00:04:13,750 >> Jeg har aldri tatt en formell kurs. 76 00:04:13,750 --> 00:04:17,269 Jeg bare vet biter fra ulike allierte fag 77 00:04:17,269 --> 00:04:18,579 at jeg har tatt kurs i. 78 00:04:18,579 --> 00:04:21,839 Og jeg var i stand til å forstå det helt bra. 79 00:04:21,839 --> 00:04:25,630 >> Alle tall er oppgitt i R. De er laget i R 80 00:04:25,630 --> 00:04:30,280 og de har også en kode oppføringer under hver figur som forteller deg 81 00:04:30,280 --> 00:04:33,270 hvordan du gjør hver figur med R-kode. 82 00:04:33,270 --> 00:04:37,400 Og det er veldig nyttig hvis du prøver å etterligne 83 00:04:37,400 --> 00:04:38,650 noen figuren du ser i en bok. 84 00:04:38,650 --> 00:04:47,840 >> Og igjen gratis nedlasting stat.cmu.edu/cshalizi/ Sorry, 85 00:04:47,840 --> 00:04:50,230 som bør kutte tilde cshalizi. 86 00:04:50,230 --> 00:04:53,150 Jeg skal sørge for å rette opp dette når de offisielle lysbilder gå opp. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV som er akkurat den akronym av boktittelen. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Så generelt caveats-- R har mange evner. 90 00:05:02,500 --> 00:05:05,331 Jeg bare kommer til å være i stand til å dekke overflaten av en rekke ting. 91 00:05:05,331 --> 00:05:08,580 Også den første delen av seminaret kommer til å være noe av en data dump. 92 00:05:08,580 --> 00:05:11,437 Jeg er ganske lei for det. 93 00:05:11,437 --> 00:05:13,770 I utgangspunktet kommer jeg til å introdusere deg til en masse ting 94 00:05:13,770 --> 00:05:15,350 rett utenfor balltre, går så fort som mulig. 95 00:05:15,350 --> 00:05:17,058 Og så får vi den morsomme delen, som er 96 00:05:17,058 --> 00:05:20,570 demo hvor jeg kan vise deg alt at vi har snakket om på skjermen. 97 00:05:20,570 --> 00:05:23,321 Og du kan spille rundt på egen hånd. 98 00:05:23,321 --> 00:05:26,070 Så det kommer til å bli mye tekniske ting kastet opp på her. 99 00:05:26,070 --> 00:05:28,060 Ikke bekymre deg om å kopiere alt ned. 100 00:05:28,060 --> 00:05:31,740 Fordi A, kan du få all den ting på CS50 nettsiden senere. 101 00:05:31,740 --> 00:05:37,780 Og B, er det egentlig ikke så viktig å huske dette fra lysbildene. 102 00:05:37,780 --> 00:05:40,462 Det er viktigere at du får noen intuitive anlegg med det 103 00:05:40,462 --> 00:05:44,220 og som kommer fra bare spille rundt. 104 00:05:44,220 --> 00:05:45,720 >> Så hvorfor bruke R? 105 00:05:45,720 --> 00:05:49,440 I utgangspunktet, hvis du har et prosjekt som innebærer gruvedrift store datasett, data 106 00:05:49,440 --> 00:05:52,664 visualisering, du bør bruke R. Hvis du er 107 00:05:52,664 --> 00:05:55,830 gjør kompliserte statistiske analyser, det ville være vanskelig å i Excel, 108 00:05:55,830 --> 00:05:58,010 for eksempel, det ville også bra-- også 109 00:05:58,010 --> 00:06:00,506 hvis du gjør statistisk analyse som er automatisert. 110 00:06:00,506 --> 00:06:02,130 La oss si at du vedlikeholde et nettsted. 111 00:06:02,130 --> 00:06:06,320 Og du vil lese serverloggen hver dag og kompilere noen liste, 112 00:06:06,320 --> 00:06:10,320 som de beste landene som brukerne kommer fra, 113 00:06:10,320 --> 00:06:15,100 noen sammendrag statistikk på hvor lenge de bruker på din nettside eller hva. 114 00:06:15,100 --> 00:06:16,910 Og du vil kjøre dette hver dag. 115 00:06:16,910 --> 00:06:20,280 >> Nå hvis du gjør dette i Excel, du måtte gå til serveren din logg, 116 00:06:20,280 --> 00:06:23,490 importere denne inn i en Excel data regneark, 117 00:06:23,490 --> 00:06:24,910 kjøre hele analysen manuelt. 118 00:06:24,910 --> 00:06:27,100 Med R, kan du bare skrive ett skript. 119 00:06:27,100 --> 00:06:29,520 Planlegge det å kjøre hver dag fra operativsystemet. 120 00:06:29,520 --> 00:06:33,657 Og så hver kveld kl 02:00, eller når du planlegger det å kjøre, 121 00:06:33,657 --> 00:06:35,990 det vil se gjennom din Internett-trafikken for den dagen. 122 00:06:35,990 --> 00:06:39,010 Og så ved neste dag, vil du har denne skinnende, nye rapporten 123 00:06:39,010 --> 00:06:41,710 eller hva med alle de informasjonen du har bedt om. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Så i utgangspunktet R er for Cisco programmering versus Cisco analyse. 126 00:06:50,217 --> 00:06:51,050 Foreløpig er gjort. 127 00:06:51,050 --> 00:06:53,104 La oss komme inn i de virkelige tingene. 128 00:06:53,104 --> 00:06:55,020 Så det er tre virke typer i språket. 129 00:06:55,020 --> 00:06:56,120 Det er numerisk type. 130 00:06:56,120 --> 00:07:01,250 Det er liksom en forskjell mellom heltall og flytende poeng, 131 00:07:01,250 --> 00:07:02,769 men egentlig ikke. 132 00:07:02,769 --> 00:07:04,560 Det er et tegn skriver, som er strenger. 133 00:07:04,560 --> 00:07:07,100 Og det er en logisk skriver, som er Booleans. 134 00:07:07,100 --> 00:07:11,080 >> Og du kan konvertere mellom typer ved hjelp av disse funksjonene som numerisk, 135 00:07:11,080 --> 00:07:15,220 som karakter, som logisk. 136 00:07:15,220 --> 00:07:17,510 Hvis du ringer, for eksempel, som numerisk på en snor, 137 00:07:17,510 --> 00:07:20,030 det vil prøve å lese at strengen som et tall, på samme måte 138 00:07:20,030 --> 00:07:25,897 at a2i og scanf gjøre, og C. Hvis du kaller som numerisk på sant eller usant 139 00:07:25,897 --> 00:07:26,980 som blir konvertert til en eller 0. 140 00:07:26,980 --> 00:07:29,110 Hvis du ringer som karakter på noe det vil 141 00:07:29,110 --> 00:07:32,550 konvertere denne til en strengrepresentasjon. 142 00:07:32,550 --> 00:07:34,990 >> Og så er det vektorer og matriser. 143 00:07:34,990 --> 00:07:37,580 Så vektorer er i utgangspunktet 1 dimensjonale arrays. 144 00:07:37,580 --> 00:07:40,600 De er det vi kaller arrays i C. matriser, 2 dimensjonale arrays. 145 00:07:40,600 --> 00:07:42,350 Og deretter høyere dimensjonale arrays du kan 146 00:07:42,350 --> 00:07:48,560 har 3, 4, 5 dimensjoner eller hva av numeriske verdier, strenger, 147 00:07:48,560 --> 00:07:52,860 logiske verdier. 148 00:07:52,860 --> 00:07:55,380 >> Du har også lister som er en slags assosiativ array. 149 00:07:55,380 --> 00:07:57,390 Jeg skal gå inn på det litt. 150 00:07:57,390 --> 00:07:59,390 Så en viktig ting som felte folk opp i R 151 00:07:59,390 --> 00:08:01,470 er at det ikke er noen virkelige, rene atomtyper. 152 00:08:01,470 --> 00:08:05,870 Det er ingen faktiske skillet mellom et tall, som en numerisk verdi, 153 00:08:05,870 --> 00:08:07,920 og en liste med numeriske verdier. 154 00:08:07,920 --> 00:08:12,370 Numeriske verdier er faktisk den samme som vektorer av lengde en. 155 00:08:12,370 --> 00:08:14,959 Og dette har en rekke viktige implikasjoner. 156 00:08:14,959 --> 00:08:17,500 En, betyr det at du kan gjøre ting veldig lett som involverer 157 00:08:17,500 --> 00:08:21,037 som å legge et nummer til en vektor. 158 00:08:21,037 --> 00:08:23,120 R vil i utgangspunktet figur ut hva du mener med det. 159 00:08:23,120 --> 00:08:24,610 Og jeg får til det i et sekund. 160 00:08:24,610 --> 00:08:27,930 Det betyr også at det er ingen måte for typen checker-- i den grad 161 00:08:27,930 --> 00:08:30,530 at noe sånt eksisterer i r-- å fortelle 162 00:08:30,530 --> 00:08:33,780 når du har passert i enkeltverdi når det forventer en matrise eller vice versa. 163 00:08:33,780 --> 00:08:39,159 Og det kan føre til at noen odde problemer som jeg kjørte inn når 164 00:08:39,159 --> 00:08:42,252 Jeg brukte R under min sommerjobb. 165 00:08:42,252 --> 00:08:43,710 Og det er ingen blandet type matriser. 166 00:08:43,710 --> 00:08:46,543 Så du kan ikke ha en rekke var det første elementene er, vet jeg ikke, 167 00:08:46,543 --> 00:08:49,332 strengen "John" og andre element er nummer 42. 168 00:08:49,332 --> 00:08:52,540 Hvis du prøver å gjøre det, så vil du få alt bare konvertert til en streng. 169 00:08:52,540 --> 00:08:54,760 Så vi har streng John, string 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Så uvanlig syntaktisk features-- mest av R syntaks er svært lik C. 172 00:09:02,025 --> 00:09:04,690 Det er noen viktige forskjeller. 173 00:09:04,690 --> 00:09:05,620 Typing er veldig svak. 174 00:09:05,620 --> 00:09:07,360 Så det er ingen variabeldeklarasjoner. 175 00:09:07,360 --> 00:09:12,670 Overdragelse bruker merkelig error operatør mindre enn bindestrek. 176 00:09:12,670 --> 00:09:15,340 Kommentarer er med hash mark. 177 00:09:15,340 --> 00:09:19,230 Jeg antar nå dagene vi kaller det hashtag men det er egentlig ikke accurate-- ikke 178 00:09:19,230 --> 00:09:21,810 dobbel skråstrek. 179 00:09:21,810 --> 00:09:24,710 >> Modulære rester er med %% tegn. 180 00:09:24,710 --> 00:09:30,172 Heltallsdivisjon er med% /% som er veldig vanskelig å lese når det er anslått 181 00:09:30,172 --> 00:09:30,880 opp på skjermen. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 Du kan få områder av heltall med kolon. 184 00:09:37,200 --> 00:09:41,840 Så 2,5 vil gi deg en vektor av alle tallene 2 til 5. 185 00:09:41,840 --> 00:09:44,530 >> Arrays er ett indeksert, som skruer mye folk 186 00:09:44,530 --> 00:09:47,540 opp hvis de er fra mer typiske programmeringsspråk, 187 00:09:47,540 --> 00:09:50,450 som C, hvor de fleste ting er null-indeksert. 188 00:09:50,450 --> 00:09:54,420 Igjen, dette er hvor R arv som et språk for som ikke 189 00:09:54,420 --> 00:09:56,560 profesjonelle programmerere kommer inn. 190 00:09:56,560 --> 00:09:59,680 Hvis du er en sosiolog eller en økonom eller noe 191 00:09:59,680 --> 00:10:01,980 og du prøver å bruke R i utgangspunktet som et supplement 192 00:10:01,980 --> 00:10:03,832 til viktigere faglige arbeidet, 193 00:10:03,832 --> 00:10:06,040 du kommer til å finne one-indeksering litt mer naturlig. 194 00:10:06,040 --> 00:10:09,890 Fordi du begynne å telle på en i hverdagen, ikke 0. 195 00:10:09,890 --> 00:10:13,260 >> For-løkker, er denne lik foreach konstruere i PHP, 196 00:10:13,260 --> 00:10:17,090 som du får til lære in-- ganske snart. 197 00:10:17,090 --> 00:10:22,540 Som er for verdi i vektor og så kan du gjøre ting med verdi. 198 00:10:22,540 --> 00:10:24,040 PUBLIKUM: Det er å komme opp i forelesningen. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Å, det er komme opp forelesning, utmerket. 200 00:10:26,248 --> 00:10:29,815 PUBLIKUM: Oppdraget, er det skal peke fra høyre til venstre? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: Fra høyre til venstre, ja. 202 00:10:31,440 --> 00:10:34,720 Du kan tenke på det som verdien på høyre dyttet inn i variabelen 203 00:10:34,720 --> 00:10:36,240 til venstre. 204 00:10:36,240 --> 00:10:36,781 PUBLIKUM: OK. 205 00:10:36,781 --> 00:10:39,770 206 00:10:39,770 --> 00:10:42,330 >> CONNOR HARRIS: Og til slutt funksjonen syntaks er litt rart. 207 00:10:42,330 --> 00:10:48,460 Du har funksjonen navnet foo, tildelt til dette søkeordet funksjon, etterfulgt 208 00:10:48,460 --> 00:10:51,530 av alle argumentene og deretter delen av funksjon etter at. 209 00:10:51,530 --> 00:10:53,280 Igjen disse tingene kan virke litt rart. 210 00:10:53,280 --> 00:10:57,181 De vil bli andre natur etter du arbeider med språket for litt. 211 00:10:57,181 --> 00:10:58,930 Så vektorer, måten du konstruere en vektor 212 00:10:58,930 --> 00:11:04,550 er du type C, som er et nøkkelord, og deretter alle numrene du vil eller strenger 213 00:11:04,550 --> 00:11:06,490 eller hva. 214 00:11:06,490 --> 00:11:07,995 Argumenter også være vektorer. 215 00:11:07,995 --> 00:11:09,620 Men den resulterende matrisen blir flat. 216 00:11:09,620 --> 00:11:14,385 Så du kan ikke ha arrays der noen elementer er enkle tall 217 00:11:14,385 --> 00:11:17,010 og noen elementer er arrays selv. 218 00:11:17,010 --> 00:11:20,010 >> Så hvis du prøver å konstruere en rekke var det første elementet er 4 219 00:11:20,010 --> 00:11:22,370 og det andre element er matrisen 3,5 du vil 220 00:11:22,370 --> 00:11:25,890 bare få en tre elementer array, 4,3,5. 221 00:11:25,890 --> 00:11:27,760 De kan ikke være av blandet type. 222 00:11:27,760 --> 00:11:32,290 Hvis du prøver å lese eller skrive utenfor grensene av en vektor 223 00:11:32,290 --> 00:11:36,640 du får denne verdien kalles NA en som står for en manglende verdi. 224 00:11:36,640 --> 00:11:39,900 Og dette er ment for som statistikere som 225 00:11:39,900 --> 00:11:43,080 arbeider med ufullstendige datasett. 226 00:11:43,080 --> 00:11:46,460 >> Hvis du bruker en funksjon som er ment å ta bare ett nummer til en matrise 227 00:11:46,460 --> 00:11:49,220 så hva du får er, jo Funksjonen vil kartlegge over array. 228 00:11:49,220 --> 00:11:52,130 Så hvis din funksjon la oss si tar et tall og returnerer den firkantede. 229 00:11:52,130 --> 00:11:58,170 Du bruke det til rekken 2,3,5 Det du får er matrisen 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> Og det er svært nyttig fordi det betyr at du 231 00:12:00,010 --> 00:12:03,374 trenger ikke å skrive for looper for gjør veldig enkle ting som å påføre 232 00:12:03,374 --> 00:12:05,040 en funksjon til alle medlemmer av et datasett. 233 00:12:05,040 --> 00:12:08,557 Som hvis du arbeider med store datasett, må du gjøre mye. 234 00:12:08,557 --> 00:12:10,390 Binære funksjoner er anvendt oppføring ved innreise. 235 00:12:10,390 --> 00:12:12,430 Jeg skal gå inn på det. 236 00:12:12,430 --> 00:12:16,750 Du får tilgang til dem med matriser eller vektorer med hakeparenteser. 237 00:12:16,750 --> 00:12:22,300 Så vektor navn hakeparentes 1 vil gi deg det første elementet. 238 00:12:22,300 --> 00:12:25,510 Vector navn klammer 2 vil gi deg det andre elementet. 239 00:12:25,510 --> 00:12:27,530 >> Du kan passere på en vektor indekser og du vil 240 00:12:27,530 --> 00:12:29,640 komme tilbake ut i utgangspunktet en sub faktor. 241 00:12:29,640 --> 00:12:34,990 Så du kan gjøre vektor navn brak C, 2,4 og du får ut en vektor som inneholder 242 00:12:34,990 --> 00:12:38,804 den andre og fjerde elementer i matrisen. 243 00:12:38,804 --> 00:12:40,720 Og hvis du bare ønsker en rask oppsummering statistikk 244 00:12:40,720 --> 00:12:47,529 av en vektor som interkvartilt rekkevidde, median, maksimum, uansett, 245 00:12:47,529 --> 00:12:49,820 du kan bare skrive sammendrag vektor navn og få det ut. 246 00:12:49,820 --> 00:12:52,680 Det er ikke veldig nyttig i programmering, men hvis du spiller 247 00:12:52,680 --> 00:12:55,990 rundt datasettene, er det praktisk. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- utgangspunktet høyere dimensjonale arrays. 249 00:12:58,650 --> 00:13:01,190 De har denne spesielle notasjon syntaks. 250 00:13:01,190 --> 00:13:07,620 Matrise med en matrise som får fylt in-- beklager, matrise med data, 251 00:13:07,620 --> 00:13:09,780 antall rader, antall kolonner. 252 00:13:09,780 --> 00:13:13,180 Når du har noen data, fyller det i matrisen i utgangspunktet kommer fra topp til bunn 253 00:13:13,180 --> 00:13:13,380 først. 254 00:13:13,380 --> 00:13:14,190 Deretter til venstre mot høyre. 255 00:13:14,190 --> 00:13:15,030 Så sånn. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 Og R har innebygget matrise multiplikasjon, 258 00:13:19,600 --> 00:13:24,310 spektral nedbryting, diagonalisering, en masse ting. 259 00:13:24,310 --> 00:13:27,785 Hvis du ønsker høyere dimensjonale matriser, så 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 eller hva dimensjonene du kan gjøre det. 261 00:13:29,410 --> 00:13:34,400 Syntaksen er rekke dim lik c, da listen over dimensjonene. 262 00:13:34,400 --> 00:13:38,620 Så hvis du vil ha en fire dimensjonal array med dimensjoner 4, 7, 8, 9, matrisen, 263 00:13:38,620 --> 00:13:45,470 dim lik c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> Du får tilgang til enkeltverdier med brak første oppføringen komma andre oppføring. 265 00:13:51,180 --> 00:13:54,870 Du kan få hele skiver rader eller kolonner. 266 00:13:54,870 --> 00:13:59,900 Med denne ufullstendig syntaks er det bare radnummer komma eller komma kolonne 267 00:13:59,900 --> 00:14:00,400 Antall. 268 00:14:00,400 --> 00:14:02,874 269 00:14:02,874 --> 00:14:04,540 Så lister er en slags assosiert array. 270 00:14:04,540 --> 00:14:06,360 De har sin egen syntaks her. 271 00:14:06,360 --> 00:14:08,320 Igjen ikke febrilsk kopiere alt dette ned. 272 00:14:08,320 --> 00:14:11,370 Dette er bare slik at folk går gjennom lysbildene senere 273 00:14:11,370 --> 00:14:13,089 har alt dette i en fin referanse. 274 00:14:13,089 --> 00:14:16,130 Og dette vil bli veldig naturlig når Jeg faktisk gå gjennom demoene. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Så viser en i utgangspunktet knyttet arrays. 277 00:14:20,920 --> 00:14:27,040 Du får tilgang til verdier med listenavn, dollartegn, nøkkel. 278 00:14:27,040 --> 00:14:31,370 Så hvis listen er oppkalt foo, så kan du få tilgang til det sånn. 279 00:14:31,370 --> 00:14:37,032 Du kan få en hel nøkkel-verdi-par ved å passere i hakeparentes indeksen. 280 00:14:37,032 --> 00:14:39,240 Hvis du leser fra en ikke-eksisterende tasten, får du null. 281 00:14:39,240 --> 00:14:41,150 Det vil ikke feil. 282 00:14:41,150 --> 00:14:43,590 Saken er, R vil gjøre som mye med null som mulig. 283 00:14:43,590 --> 00:14:46,580 Og dette kan bety at hvis du er ikke ventet å få null ut 284 00:14:46,580 --> 00:14:51,840 av noen liste lese, vil du få noen uforutsigbare feil lenger ned 285 00:14:51,840 --> 00:14:52,620 køen. 286 00:14:52,620 --> 00:14:54,890 >> Dette skjedde med meg min sommerjobb da jeg var med R 287 00:14:54,890 --> 00:14:58,410 hvor jeg forandret hvordan en viss Listen ble definert på ett sted 288 00:14:58,410 --> 00:15:05,410 men ikke endre senere på kode som leser verdier fra den. 289 00:15:05,410 --> 00:15:10,190 Og så det som skjedde var jeg var lesing nullverdier ut av denne listen, 290 00:15:10,190 --> 00:15:13,090 passerer dem inn funksjoner, og blir veldig forvirret 291 00:15:13,090 --> 00:15:16,000 da jeg fikk alle slags tilfeldige infinities beskjæring opp 292 00:15:16,000 --> 00:15:16,790 i denne funksjonen. 293 00:15:16,790 --> 00:15:20,730 Fordi hvis du bruker visse maksimums eller minimumsfunksjoner til null, 294 00:15:20,730 --> 00:15:22,570 du får uendelig verdier ut. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Datarammer, de er en underklasse av listen. 297 00:15:29,180 --> 00:15:31,170 Hver verdi er en vektor av samme lengde. 298 00:15:31,170 --> 00:15:34,220 Og de er vant til å presentere, utgangspunktet, datatabeller. 299 00:15:34,220 --> 00:15:36,175 Det er denne initialisering syntaks. 300 00:15:36,175 --> 00:15:38,800 Dette vil alt nytt, være mye klarere når du kommer til demo. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 Og det fine med datarammer er at du 303 00:15:44,240 --> 00:15:49,380 kan gi navn til alle kolonnene og navnene til alle radene. 304 00:15:49,380 --> 00:15:53,890 Og så gjør tilgang dem litt vennligere. 305 00:15:53,890 --> 00:15:59,130 Også dette er hvordan de fleste funksjoner som lese i data fra Excel regneark 306 00:15:59,130 --> 00:16:03,820 eller fra tekstfiler, for eksempel, vil lese inn sine data. 307 00:16:03,820 --> 00:16:07,555 De vil sette den inn en slags dataramme. 308 00:16:07,555 --> 00:16:09,680 Så functions-- funksjonene Syntaksen er litt rart. 309 00:16:09,680 --> 00:16:16,160 Igjen er det navnet på funksjonen, tildele, dette søkeordet funksjon og deretter 310 00:16:16,160 --> 00:16:17,900 listen over argumenter. 311 00:16:17,900 --> 00:16:24,080 Så er det noen fine ting om hvordan funksjonene fungerer her. 312 00:16:24,080 --> 00:16:28,170 For en, kan du faktisk tildele standardverdier for visse argumenter. 313 00:16:28,170 --> 00:16:32,910 Så du kan si R1 equals-- du kan si foo 314 00:16:32,910 --> 00:16:38,290 er en funksjon hvor R1 er lik noe som standard hvis brukeren angir 315 00:16:38,290 --> 00:16:39,090 ingen argumenter. 316 00:16:39,090 --> 00:16:41,932 Ellers er det hva han satt i. 317 00:16:41,932 --> 00:16:44,140 Og dette er veldig praktisk fordi mange av våre funksjoner 318 00:16:44,140 --> 00:16:47,910 har ofte flere titalls eller hundrevis av argumenter. 319 00:16:47,910 --> 00:16:51,210 For eksempel de som for plotting grafer eller plotting spredningsplott 320 00:16:51,210 --> 00:16:54,430 har argumenter som styrer alt fra tittelen og aksen 321 00:16:54,430 --> 00:16:59,512 etiketter, til fargen på regresjonslinjer. 322 00:16:59,512 --> 00:17:01,470 Og så hvis du ikke vil å få folk til å spesifisere 323 00:17:01,470 --> 00:17:04,050 hver eneste en av disse hundrevis av argumenter 324 00:17:04,050 --> 00:17:07,674 kontrollere hvert eneste aspekt av en tomt eller en regresjon eller hva, 325 00:17:07,674 --> 00:17:09,299 det er fint å ha disse standardverdiene. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> Og da kan du faktisk skrive som du så tilbake hit. 328 00:17:19,146 --> 00:17:22,869 Eller finne et bedre eksempel. 329 00:17:22,869 --> 00:17:28,690 Når du ringer funksjoner kan du faktisk kalle dem ved hjelp av argumentnavn. 330 00:17:28,690 --> 00:17:33,919 Så her er et eksempel på matrisen konstruktøren. 331 00:17:33,919 --> 00:17:34,960 Det tar tre argumenter. 332 00:17:34,960 --> 00:17:36,760 Vanligvis har du data, som er en vektor. 333 00:17:36,760 --> 00:17:38,920 Du har N rad, noe som er antall rader. 334 00:17:38,920 --> 00:17:41,160 Du har N cols-- antall kolonner. 335 00:17:41,160 --> 00:17:43,920 Saken er hvis du skriver N rad lik uansett 336 00:17:43,920 --> 00:17:46,520 og N col lik uansett når du ringer denne funksjonen, 337 00:17:46,520 --> 00:17:47,770 du faktisk kan reversere dem. 338 00:17:47,770 --> 00:17:51,590 Så du kan sette N col først og N rad sekund, og det vil gjøre noen forskjell. 339 00:17:51,590 --> 00:17:54,660 Så det er en fin liten funksjon. 340 00:17:54,660 --> 00:17:56,260 >> Gjorde import og eksport. 341 00:17:56,260 --> 00:18:00,010 Dette kan gjøres, i utgangspunktet. 342 00:18:00,010 --> 00:18:03,816 Det finnes også fasiliteter for å skrive ut vilkårlig R objekter til en binærfil 343 00:18:03,816 --> 00:18:05,190 og deretter lese dem tilbake senere. 344 00:18:05,190 --> 00:18:08,030 Som er praktisk hvis du gjør en stor interaktiv sesjon R 345 00:18:08,030 --> 00:18:12,850 og du må spare ting veldig raskt. 346 00:18:12,850 --> 00:18:16,460 Som standard R har en arbeidskatalog at filene blir skrevet ut i 347 00:18:16,460 --> 00:18:19,410 og lese tilbake i fra. 348 00:18:19,410 --> 00:18:22,350 Du kan se at med getwg, endre det med setdw. 349 00:18:22,350 --> 00:18:25,630 Ingenting spesielt interessant her 350 00:18:25,630 --> 00:18:28,270 >> Så nå selve statistikken stuff-- multilinear regresjon. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Så den vanlige syntaksen er litt komplisert. 353 00:18:34,910 --> 00:18:37,260 Modellen er et stort objekt i utgangspunktet. 354 00:18:37,260 --> 00:18:39,910 Det blir tildelt lm, som er en funksjon. 355 00:18:39,910 --> 00:18:43,840 Det første elementet, y tilde x1 pluss uansett. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 Min syntaks her er litt forvirrende. 358 00:18:47,990 --> 00:18:49,490 Jeg er ganske lei meg, dette er den vanlige måten 359 00:18:49,490 --> 00:18:50,990 at informatikk bøker gjør dette. 360 00:18:50,990 --> 00:18:54,890 Men det er litt rart. 361 00:18:54,890 --> 00:18:58,200 >> Så i utgangspunktet er det lm parentes, første elementet 362 00:18:58,200 --> 00:19:06,730 er variable-- beklager, avhengig variabel tilde x1 pluss x2 pluss 363 00:19:06,730 --> 00:19:10,910 men mange uavhengige variabler du har. 364 00:19:10,910 --> 00:19:14,240 Og så disse kan enten være vektorer, alle samme lengde. 365 00:19:14,240 --> 00:19:16,220 Eller de kan være kolonne overskrifter i en dataramme 366 00:19:16,220 --> 00:19:18,553 at du bare angir i andre argument dataramme. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> Du kan også angi en mer kompleks formel 369 00:19:26,380 --> 00:19:31,990 slik at du ikke trenger å lineært regress en avhengig variabel, 370 00:19:31,990 --> 00:19:34,440 eller én vektor på en pre-eksisterende vektor. 371 00:19:34,440 --> 00:19:38,070 Man kan gjøre, for eksempel en vektorkomponent y squared pluss 1 372 00:19:38,070 --> 00:19:42,100 og regress som mot logge av noen andre vektor. 373 00:19:42,100 --> 00:19:45,200 Du kan skrive sammendrag av modell med denne kommandoen kalles 374 00:19:45,200 --> 00:19:48,607 summary-- bare sammendrag Parens modell. 375 00:19:48,607 --> 00:19:50,190 Igjen noe annet jeg bør avklare. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Noe annet som vil bli korrigert når lysbildene gå opp på internett. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Hvis du bare ønsker å beregne en enkel korrelasjon 380 00:20:03,210 --> 00:20:09,170 du kan bruke korrelasjon vektor En vektor to funksjon kjerne. 381 00:20:09,170 --> 00:20:11,856 Metoden er som standard Pearson korrelasjoner. 382 00:20:11,856 --> 00:20:13,480 De er de standard som du kan gjøre. 383 00:20:13,480 --> 00:20:15,990 Det også Spearman og Kendell korrelasjoner 384 00:20:15,990 --> 00:20:19,530 som er litt variasjon av stigende rekkefølge korrelasjon. 385 00:20:19,530 --> 00:20:23,600 Vel de ikke beregne produkt øyeblikkene mellom vektorene selv, 386 00:20:23,600 --> 00:20:28,511 men av vektor rang bestillinger. 387 00:20:28,511 --> 00:20:29,510 Jeg skal forklare det senere. 388 00:20:29,510 --> 00:20:30,120 >> PUBLIKUM: Quick spørsmålet 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Sure. 390 00:20:30,360 --> 00:20:33,151 >> PUBLIKUM: Så når du beregne for de enkle korrelasjoner gjøre 391 00:20:33,151 --> 00:20:37,655 du antar at det er en statistisk betydning for korrelasjonen? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Du trenger ikke å. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 En lm er i utgangspunktet bare en maskin. 395 00:20:43,960 --> 00:20:47,690 Det vil ta to ting og det vil spytte ut 396 00:20:47,690 --> 00:20:49,770 koeffisienter for best mulig passform linjen. 397 00:20:49,770 --> 00:20:52,310 Den rapporterer også standard feil på disse koeffisientene. 398 00:20:52,310 --> 00:20:55,865 Og det vil fortelle deg, som er den skjærings statistisk signifikant 399 00:20:55,865 --> 00:20:56,740 eller forskjellen fra 0. 400 00:20:56,740 --> 00:20:59,400 Er helningen av de beste fit linje statistisk 401 00:20:59,400 --> 00:21:01,510 forskjellig fra null, et cetera. 402 00:21:01,510 --> 00:21:06,260 Så det foruts ingenting, tror jeg er beste svaret på spørsmålet ditt. 403 00:21:06,260 --> 00:21:07,410 OK. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- så den viktigste grunnen til at du bør bruke R, som multilinear regresjon. 405 00:21:14,650 --> 00:21:17,320 I utgangspunktet alle språk har noen anlegg for det. 406 00:21:17,320 --> 00:21:21,365 Og ærlig R syntaks for regresjon er litt uforståelige. 407 00:21:21,365 --> 00:21:22,990 Men plotting er der det virkelig skinner. 408 00:21:22,990 --> 00:21:28,090 >> Arbeidshesten funksjonen er tomt og det tar to vektorer, x og y. 409 00:21:28,090 --> 00:21:33,010 Og så ellipser står for en svært stort antall valgfrie argumenter som 410 00:21:33,010 --> 00:21:39,190 kontrollere alt fra titler til farger av ulike linjer eller ulike punkter, 411 00:21:39,190 --> 00:21:40,200 til type plottet. 412 00:21:40,200 --> 00:21:42,250 Du kan ha scatter tomter eller linje plott. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [Uhørbart] 2 vektorer av samme lengde. 415 00:21:49,710 --> 00:21:53,780 Du kan gå forut for dette med feste dataramme i skriptet. 416 00:21:53,780 --> 00:22:01,220 Og dette vil la deg bare bruke kolonne overskrifter i stedet for separate vektorer. 417 00:22:01,220 --> 00:22:05,410 Du kan legge best tilpassede linjer og lokal regresjonskurver til diagrammet. 418 00:22:05,410 --> 00:22:09,390 >> Disse kommandoene oppført her, ab linje og linjer, 419 00:22:09,390 --> 00:22:11,640 som standard disse få skrevet inn i pop up-vinduer 420 00:22:11,640 --> 00:22:15,560 fordi det forutsetter at du bruker R interaktivt. 421 00:22:15,560 --> 00:22:17,310 Hvis du ikke er mulig skrive to filer som 422 00:22:17,310 --> 00:22:21,600 er i virkelig alle formater du ønsker. 423 00:22:21,600 --> 00:22:25,410 Sorry, jeg har en skrivefeil jeg bare realisert. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Hvis du ønsker å åpne en annen grafisk enhet 426 00:22:32,720 --> 00:22:39,200 du kan bruke denne funksjonen kalles PNG eller JPEG eller en rekke andre bildeformater. 427 00:22:39,200 --> 00:22:42,319 Og du kan skrive grafer til hva filnavnet du angir. 428 00:22:42,319 --> 00:22:45,110 For å avbryte at du må use-- Jeg skrev ikke dette i slide-- 429 00:22:45,110 --> 00:22:49,650 men det er en funksjon som heter dev dot off som tar ingen argumenter. 430 00:22:49,650 --> 00:22:51,517 >> Så er det fasiliteter for 3D plotting 431 00:22:51,517 --> 00:22:53,350 og for kontur plotting Hvis du ønsker å gjøre 432 00:22:53,350 --> 00:22:55,700 grafer av to uavhengige variabler. 433 00:22:55,700 --> 00:22:57,150 Jeg vil ikke komme inn disse akkurat nå. 434 00:22:57,150 --> 00:22:59,130 >> Det er også noen fasiliteter for animasjon 435 00:22:59,130 --> 00:23:01,300 de er vanligvis vedlikeholdes av tredjeparter. 436 00:23:01,300 --> 00:23:06,330 Jeg har gjort animasjoner med R grafer, men jeg har ikke brukt disse tredjeparts 437 00:23:06,330 --> 00:23:06,940 bibliotekene. 438 00:23:06,940 --> 00:23:09,929 Så jeg kan egentlig ikke attest til hvor gode de er. 439 00:23:09,929 --> 00:23:12,220 Hva jeg anbefale hvis du ønsker å lage animasjoner ved hjelp av R 440 00:23:12,220 --> 00:23:16,480 er at du kan skrive ut alle rammene for animasjonene 441 00:23:16,480 --> 00:23:18,470 og deretter kan du bruke en tredjepart program-- 442 00:23:18,470 --> 00:23:23,630 typisk de kalles FFmpeg eller ImageMagick-- å sy 443 00:23:23,630 --> 00:23:26,540 alle dine rammer i ett animasjon. 444 00:23:26,540 --> 00:23:28,380 >> Så tid for demo. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Så hvis du bruker noen Unix lignende system som er Linux BSD, men som bruker BSD. 447 00:23:37,189 --> 00:23:39,730 OS X åpner du et terminalvindu og Type R i ledeteksten. 448 00:23:39,730 --> 00:23:42,820 Hvis du har R studio eller lignende, som også fungerer. 449 00:23:42,820 --> 00:23:46,270 For Windows-brukere bør du være i stand til å finne R på Start-menyen. 450 00:23:46,270 --> 00:23:50,390 Det bør bli kalt noe som R x64 tre poeng uansett. 451 00:23:50,390 --> 00:23:53,110 Åpne den opp der. 452 00:23:53,110 --> 00:23:58,850 >> Så nå la meg bare åpne et terminalvindu. 453 00:23:58,850 --> 00:24:02,562 Greit, søk. 454 00:24:02,562 --> 00:24:03,520 PUBLIKUM: Command-Space 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Command-Space, takk. 456 00:24:06,675 --> 00:24:10,030 Jeg vanligvis ikke bruker Mac. 457 00:24:10,030 --> 00:24:13,310 Terminal, viser nytt vindu. 458 00:24:13,310 --> 00:24:18,120 New window er innstillinger grunnleggende, R. Så du bør få 459 00:24:18,120 --> 00:24:22,230 en velkomstmelding, noe som dette. 460 00:24:22,230 --> 00:24:31,060 >> Så jeg bruker R interaktivt. 461 00:24:31,060 --> 00:24:32,719 Du kan også skrive R scripts selvfølgelig. 462 00:24:32,719 --> 00:24:34,510 I utgangspunktet skript kjøres nøyaktig samme måte som 463 00:24:34,510 --> 00:24:40,250 Hvis du sitter ved datamaskinen skriver i hver linje én om gangen. 464 00:24:40,250 --> 00:24:42,660 Så la oss starte med å lage en vektor. 465 00:24:42,660 --> 00:24:46,230 En pil C 1, 2. 466 00:24:46,230 --> 00:24:49,400 1, 2, 4. 467 00:24:49,400 --> 00:24:50,050 Ok sikkert. 468 00:24:50,050 --> 00:24:51,630 Jeg kan lage skriftstørrelsen større. 469 00:24:51,630 --> 00:24:53,030 >> PUBLIKUM: Command-Plus 470 00:24:53,030 --> 00:24:53,650 >> CONNER HARRIS: Command-Plus. 471 00:24:53,650 --> 00:24:54,191 Command-Plus. 472 00:24:54,191 --> 00:24:57,610 473 00:24:57,610 --> 00:25:00,370 Greit, hvordan det? 474 00:25:00,370 --> 00:25:00,870 God? 475 00:25:00,870 --> 00:25:01,551 OK. 476 00:25:01,551 --> 00:25:03,300 Så la oss begynne med erklære en vektor listen. 477 00:25:03,300 --> 00:25:08,710 Gjør en, pil, C 1,2,4. 478 00:25:08,710 --> 00:25:11,181 Vi kan se en. 479 00:25:11,181 --> 00:25:12,680 Ikke bekymre deg om braketten der. 480 00:25:12,680 --> 00:25:18,590 Konsollene er så hvis du skriver ut svært lange arrays, kan vi hvor du er. 481 00:25:18,590 --> 00:25:26,987 Ett eksempel ville være hvis jeg bare ønsker range 2-200. 482 00:25:26,987 --> 00:25:28,820 Hvis jeg skrevet en veldig lang rekke, brakettene 483 00:25:28,820 --> 00:25:31,060 er bare slik at jeg kan holde styr på hvilken indeks 484 00:25:31,060 --> 00:25:33,250 vi er på hvis jeg ser gjennom dette visuelt. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Så uansett, har vi en. 487 00:25:38,280 --> 00:25:43,326 >> Så jeg sa før at arrays samhandle meget pent med, for eksempel, 488 00:25:43,326 --> 00:25:44,450 enhetlige operasjoner som dette. 489 00:25:44,450 --> 00:25:46,500 Så hva du tror jeg vil få hvis jeg skriver et pluss 1? 490 00:25:46,500 --> 00:25:49,630 491 00:25:49,630 --> 00:25:51,140 Jepp. 492 00:25:51,140 --> 00:25:54,250 Høyre, nå skal jeg gjøre dette annerledes array. 493 00:25:54,250 --> 00:26:01,650 La oss si b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Så hva tror du denne kommandoen vil gjøre? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Legg elementene. 497 00:26:10,670 --> 00:26:14,950 Og så i utgangspunktet det er hva det gjør. 498 00:26:14,950 --> 00:26:16,740 Så dette er ganske praktisk. 499 00:26:16,740 --> 00:26:23,800 Så jeg hva jeg gjør dette. c er, la oss si, 6 ganger 1 til 10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Så hva ønsker jeg å se inneholdt, tror du? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Slik at alle multipler av seks. 504 00:26:38,110 --> 00:26:42,170 Nå, hva tror du vil skje hvis jeg gjør dette? 505 00:26:42,170 --> 00:26:48,090 Jeg skal gjøre dette litt klarere, c, c. 506 00:26:48,090 --> 00:26:50,365 Så hva skjer, gjør du tror, ​​hvis jeg gjør dette? 507 00:26:50,365 --> 00:26:51,488 et pluss c. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [Uhørbart] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> PUBLIKUM: Enten en feil eller det legger bare de første tre elementene. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Ikke helt. 513 00:27:04,510 --> 00:27:05,522 Dette er hva vi fikk. 514 00:27:05,522 --> 00:27:08,910 Hva som skjer er en kortere array, en, fikk syklet. 515 00:27:08,910 --> 00:27:13,990 Så fikk vi 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Yeah. 517 00:27:15,710 --> 00:27:18,940 Og i utgangspunktet, kan du vise dette problemet før, en pluss en, 518 00:27:18,940 --> 00:27:22,190 som en underklasse av denne atferden, der den korteste matrise er bare antall 519 00:27:22,190 --> 00:27:25,410 1, som er et en elementsats. 520 00:27:25,410 --> 00:27:27,740 Jeg bare være å si vektor alle tiden i stedet for matrisen, 521 00:27:27,740 --> 00:27:30,290 fordi det er hva r dokumentasjon vanligvis gjør. 522 00:27:30,290 --> 00:27:33,070 Det er en inngrodd c vane. 523 00:27:33,070 --> 00:27:37,590 >> OK, og så nå har vi denne matrisen. 524 00:27:37,590 --> 00:27:38,830 Så har vi denne tabellen, c. 525 00:27:38,830 --> 00:27:41,380 Vi kan få oversikt statistikk på c, sammendrag c. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 Og det er fint. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Så nå la oss gjøre noen matrix ting. 530 00:27:52,670 --> 00:27:56,160 La oss si at m er en matrise. 531 00:27:56,160 --> 00:27:57,780 La oss gjøre det en tre og tre en. 532 00:27:57,780 --> 00:28:01,630 Så nrows er lik 3, og ncols er lik tre. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 Og for data la oss do-- så hva tror du dette kommer til å gjøre? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> Rett, det er den neste. 537 00:28:16,580 --> 00:28:17,970 Det er nrow og ncolumn. 538 00:28:17,970 --> 00:28:22,164 539 00:28:22,164 --> 00:28:24,580 Så det jeg har gjort er at jeg har erklært en tre og tre matrise 540 00:28:24,580 --> 00:28:26,950 og jeg har gått i en ni-element array. 541 00:28:26,950 --> 00:28:30,530 Så logaritmen av alle elementer ett til ni. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 Og alle disse verdiene fylle opp array-- beklager? 544 00:28:37,285 --> 00:28:38,660 PUBLIKUM: De er grunn 10 loggene? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: Nei, log naturlige logaritmer, så basen e. 546 00:28:41,284 --> 00:28:44,886 547 00:28:44,886 --> 00:28:47,010 Ja, hvis du ønsket basen 10 log, tror jeg du ville ha 548 00:28:47,010 --> 00:28:51,620 logge uansett, dividert med log 10. 549 00:28:51,620 --> 00:28:56,750 Og så dataene til [uhørbart] bare fylles opp matrisen, slik at toppen til bunnen, 550 00:28:56,750 --> 00:28:59,490 deretter til venstre til høyre. 551 00:28:59,490 --> 00:29:06,890 Og hvis du ønsket å gjøre noe annet array, la oss si n er matrise. 552 00:29:06,890 --> 00:29:10,317 La oss gjøre, jeg vet ikke, fra 2 til 13 år. 553 00:29:10,317 --> 00:29:11,900 Eller skal jeg gjøre noe mer interessant. 554 00:29:11,900 --> 00:29:13,770 Jeg skal gjøre 2 til 4. 555 00:29:13,770 --> 00:29:15,780 nrow tilsvarer, la oss si, tre. 556 00:29:15,780 --> 00:29:18,992 Ncol tilsvarer fire. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Så vi har fått dette. 559 00:29:22,090 --> 00:29:26,130 >> Og nå, hvis vi ønsker å multiplisere disse, vi ville gjøre n prosent ganger prosent, 560 00:29:26,130 --> 00:29:27,680 fordi det er n. 561 00:29:27,680 --> 00:29:30,234 562 00:29:30,234 --> 00:29:31,400 Og vi har matrix produkter. 563 00:29:31,400 --> 00:29:33,970 564 00:29:33,970 --> 00:29:37,810 Av de måte, fikk du se hvordan da jeg erklærte n, den 2 til 4 565 00:29:37,810 --> 00:29:43,570 vektor fikk syklet før det fylt opp alle n? 566 00:29:43,570 --> 00:29:45,710 Hvis du ønsket å ta egenverdi nedbryting, 567 00:29:45,710 --> 00:29:46,960 dette er noe vi kan gjøre veldig enkelt. 568 00:29:46,960 --> 00:29:47,709 Vi kan gjøre eigen n. 569 00:29:47,709 --> 00:29:52,290 570 00:29:52,290 --> 00:29:54,600 Og så dette er vår første møte med en liste. 571 00:29:54,600 --> 00:29:57,000 >> Så eigen n er en liste med to nøkler. 572 00:29:57,000 --> 00:29:58,430 Verdier, som er denne matrisen her. 573 00:29:58,430 --> 00:30:01,030 Og vektorer, som er denne matrisen her. 574 00:30:01,030 --> 00:30:08,240 Så hvis du ønsket å trekke ut, si, denne tredje kolonnen 575 00:30:08,240 --> 00:30:13,080 fra egenvektorer matrise, fordi egenvektorene er kolonnevektorer. 576 00:30:13,080 --> 00:30:24,400 Så vi kan gjøre vec eigen n dollartegn vektorer, komma tre, av [uhørbart]. 577 00:30:24,400 --> 00:30:29,800 578 00:30:29,800 --> 00:30:30,900 Vec. 579 00:30:30,900 --> 00:30:34,100 Er det, som du kanskje forventer. 580 00:30:34,100 --> 00:30:39,210 >> Da si n ganger prosent ganger vec. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Så resultatet her absolutt ser ut som hvis vi tok den tredje egenverdien her, 583 00:30:48,320 --> 00:30:50,390 som tilsvarer den tredje egenvektor. 584 00:30:50,390 --> 00:30:53,190 Det bare ganget alt i denne egenvektor, komponent-messig, 585 00:30:53,190 --> 00:30:53,990 av egenverdien. 586 00:30:53,990 --> 00:30:57,760 Og det er det vi forventer, fordi det er det egenverdier er. 587 00:30:57,760 --> 00:31:00,890 Har noen her ikke tatt lineær algebra? 588 00:31:00,890 --> 00:31:02,530 Et par mennesker, OK. 589 00:31:02,530 --> 00:31:04,030 Bare slå hjernen av for en bit. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 Og ja hvis vi tar eigen n dollar sign verdier 3 ganger VEC, 592 00:31:20,720 --> 00:31:21,810 godt få det samme. 593 00:31:21,810 --> 00:31:24,726 Det er formatert annerledes som en rad vektor i stedet for en kolonnevektor, 594 00:31:24,726 --> 00:31:25,640 men big deal. 595 00:31:25,640 --> 00:31:29,430 596 00:31:29,430 --> 00:31:35,170 Og så de er i utgangspunktet den fine ting som vi kan gjøre med matriser, 597 00:31:35,170 --> 00:31:36,489 demonstrert lister. 598 00:31:36,489 --> 00:31:39,030 Jeg skal demonstrere fint ting om funksjoner i tillegg. 599 00:31:39,030 --> 00:31:41,750 >> Så la oss say-- [uhørbart] funksjon, la oss kalle 600 00:31:41,750 --> 00:31:51,960 det func mot funksjon n n squared-- faktisk, det er egentlig ikke det beste. 601 00:31:51,960 --> 00:31:55,632 a, b, en kvadratisk pluss b. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Så en ting om funksjoner, igjen, er de 604 00:32:00,380 --> 00:32:01,963 trenger ikke eksplisitte retur uttalelser. 605 00:32:01,963 --> 00:32:04,250 Så du kan just-- den siste setningen evalueres 606 00:32:04,250 --> 00:32:07,502 vil være den uttalelsen tilbake, eller verdien som returneres. 607 00:32:07,502 --> 00:32:10,460 Så i dette tilfellet, vi bare evaluere en setning, en squared pluss b. 608 00:32:10,460 --> 00:32:12,043 Det vil være standardreturverdi. 609 00:32:12,043 --> 00:32:14,530 Det gjør vondt aldri å sette i returnere verdier eksplisitt, 610 00:32:14,530 --> 00:32:16,880 spesielt hvis du arbeider med en funksjon av svært komplisert logikk 611 00:32:16,880 --> 00:32:17,380 strømme. 612 00:32:17,380 --> 00:32:18,450 Men du trenger ikke dem. 613 00:32:18,450 --> 00:32:24,890 Så nå kan vi gjøre func 5, 1, og dette er egentlig hva du forventer. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Noe annet vi kan gjøre, vi kan faktisk gjøre func b 616 00:32:31,270 --> 00:32:33,260 er lik 1, a er lik fem. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Så hvis vi spesifiserer hvilket nummer her, som argument går som argument 619 00:32:40,770 --> 00:32:44,680 i funksjonen, kan vi snu rundt disse verdiene uansett hvor vi vil. 620 00:32:44,680 --> 00:32:48,405 >> PUBLIKUM: Er det en grunn å skrive det ut med b 621 00:32:48,405 --> 00:32:52,404 lik i motsetning til bare å bruke tallene og komma? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Ja, vanligvis gjøre dette hvis du har funksjoner 623 00:32:54,820 --> 00:32:58,540 med en rekke argumenter. 624 00:32:58,540 --> 00:33:00,690 Det kan ofte være like flagg som du ville bare 625 00:33:00,690 --> 00:33:03,130 vil bruke i sjeldne tilfeller. 626 00:33:03,130 --> 00:33:06,740 Og på denne måten kan only-- deg kan referere til de spesifikke argumenter 627 00:33:06,740 --> 00:33:09,110 som du ønsker å bruke ikke-standardverdier for, 628 00:33:09,110 --> 00:33:14,470 og du trenger ikke å skrive ut en haug med flagg tilsvarer falsk etter dem. 629 00:33:14,470 --> 00:33:19,710 Eller jeg kan skrive dette på nytt med en standardverdi som b er lik to. 630 00:33:19,710 --> 00:33:26,289 Og så kunne jeg gjøre f func, Jeg skal gjøre fire, en denne gangen. 631 00:33:26,289 --> 00:33:28,580 Og 17, som er 4-squared pluss 1, som du kanskje forventer. 632 00:33:28,580 --> 00:33:34,290 >> Men jeg kunne også bare kaller dette med func 4, 633 00:33:34,290 --> 00:33:36,970 og jeg får 18, fordi Jeg spesifiserer ikke b. 634 00:33:36,970 --> 00:33:38,550 Så b får standardverdien for to. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, så nå hvis du er følgende sammen med demoen, 637 00:33:47,200 --> 00:33:51,010 skriver denne linjen på din kommando spør og se hva som kommer opp. 638 00:33:51,010 --> 00:33:52,090 Egentlig ikke gjør det. 639 00:33:52,090 --> 00:33:52,590 Skriver dette. 640 00:33:52,590 --> 00:33:57,780 641 00:33:57,780 --> 00:34:01,000 Du bør få noe som dette. 642 00:34:01,000 --> 00:34:04,780 Så mtcars er en innebygd data satt for denne demonstrasjonen 643 00:34:04,780 --> 00:34:13,550 formål som kommer with-- som kommer i som standard med r distribusjon. 644 00:34:13,550 --> 00:34:19,211 Dette er en samling av statistikk fra en 1974 utgave av Motor Trend magasin 645 00:34:19,211 --> 00:34:20,710 på en rekke forskjellige bilmodeller. 646 00:34:20,710 --> 00:34:28,270 >> Så det er miles per gallon, cylinders-- Jeg glemmer hva disp er-- hestekrefter. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Antagelig. 649 00:34:32,420 --> 00:34:36,920 Hvis du bare Google MT biler, da en av de første resultatene 650 00:34:36,920 --> 00:34:38,730 vil være fra offisielle r dokumentasjon 651 00:34:38,730 --> 00:34:41,080 og det vil forklare alle disse datafeltene. 652 00:34:41,080 --> 00:34:47,020 Så vekt er-- wt er vekten av bilen i tonn. 653 00:34:47,020 --> 00:34:48,880 Q sek er kvart mile tid. 654 00:34:48,880 --> 00:34:52,409 655 00:34:52,409 --> 00:34:55,850 Så nå kan vi gjøre noen morsomme ting om MT biler er et datafelt. 656 00:34:55,850 --> 00:35:01,640 >> Så vi kan gjøre ting som radnavnet, mt biler. 657 00:35:01,640 --> 00:35:05,490 Og dette er en liste over alle radene i datasettet som er navnene på biler. 658 00:35:05,490 --> 00:35:10,780 Vi kan gjøre colnames, MT biler dette. 659 00:35:10,780 --> 00:35:15,500 Hvis du gjør mt biler, sub-numerisk indeks, som 2. 660 00:35:15,500 --> 00:35:18,177 vi får den andre kolonnen av dette, noe som ville være sylindre. 661 00:35:18,177 --> 00:35:19,370 >> PUBLIKUM: Hva gjorde du? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: jeg skrev mt biler, brak e, 663 00:35:21,570 --> 00:35:24,180 som ga meg den andre kolonne av mt biler. 664 00:35:24,180 --> 00:35:34,501 665 00:35:34,501 --> 00:35:38,110 Eller hvis vi ønsker en rad, kan jeg skrive mtcars komma 2, for eksempel. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Andre runde to komma, sånn. 668 00:35:46,390 --> 00:35:48,880 Og som går på rad din. 669 00:35:48,880 --> 00:35:54,680 Dette her bare gir deg en kolonne, men kolonnen som en vektor. 670 00:35:54,680 --> 00:36:04,634 671 00:36:04,634 --> 00:36:06,425 Jeg innså nå jeg glemte å demonstrere 672 00:36:06,425 --> 00:36:09,150 noen kule ting om vektorer som du kan gjøre med indekser. 673 00:36:09,150 --> 00:36:10,480 Så la meg gjøre det akkurat nå. 674 00:36:10,480 --> 00:36:17,130 Så la oss gjøre c gets-- sette dette på pause-- 2 ganger 1 til 10. 675 00:36:17,130 --> 00:36:21,360 Så c er bare kommer til å være vektoren 2 til 20. 676 00:36:21,360 --> 00:36:24,640 Jeg kan ta elementer som dette, c2. 677 00:36:24,640 --> 00:36:30,942 Jeg kan passere i en vektor som dette, c-- la meg 678 00:36:30,942 --> 00:36:34,470 bruker annet navn enn c, som vec c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 I utgangspunktet, jeg gjør dette slik at du ikke får 681 00:36:39,340 --> 00:36:45,010 forvirret mellom c som en vektor konstruksjon funksjon, 682 00:36:45,010 --> 00:36:48,800 og deretter c som en variabel navn. 683 00:36:48,800 --> 00:36:53,120 Mer brak c 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Dette får meg ut den fjerde, femte, og syv elementer i matrisen. 685 00:36:56,540 --> 00:37:01,740 Jeg kan gjøre vec, satt i en negativ indeksen, som negativ fire. 686 00:37:01,740 --> 00:37:06,500 Som vil få meg ut av dette med det fjerde elementet fjernes. 687 00:37:06,500 --> 00:37:10,140 Så hvis jeg ønsket å gjøre skiver, Jeg kan gjøre vec 2 til 6. 688 00:37:10,140 --> 00:37:15,480 2 kolon 6 er bare en annen vektor, som er 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Spytter ut det. 690 00:37:18,230 --> 00:37:20,770 >> Så uansett, tilbake til mt biler. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Så la oss gjøre noen regresjoner. 693 00:37:28,450 --> 00:37:34,240 La oss si at modellen gets-- la oss lineært regress-- Jeg vet ikke. 694 00:37:34,240 --> 00:37:41,780 Først la oss ikke legge mtcars, selvfølgelig. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Så [uhørbart] modell lm, la oss regress miles per gallon på tilde vekt. 697 00:38:00,010 --> 00:38:03,300 Og så dataramme er mtcars. 698 00:38:03,300 --> 00:38:06,830 Så sammendrag modell. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, så dette ser litt komplisert. 701 00:38:15,595 --> 00:38:19,380 Men innerst inne, ser ut som om vi prøver å uttrykke miles per gallon 702 00:38:19,380 --> 00:38:23,970 som en lineær funksjon av vekt, da vi fikk denne linjen her, 703 00:38:23,970 --> 00:38:28,730 som avskjærer på 37.28. 704 00:38:28,730 --> 00:38:33,830 37.28 ville være de teoretiske miles per gallon på en bil som veier null. 705 00:38:33,830 --> 00:38:41,210 Og så for hver ekstra tonn, du banke cirka fem miles per gallon 706 00:38:41,210 --> 00:38:42,440 ut av det. 707 00:38:42,440 --> 00:38:45,120 Begge disse koeffisientene dere kan se, standardfeil der. 708 00:38:45,120 --> 00:38:47,870 Og de er svært statistisk signifikant. 709 00:38:47,870 --> 00:38:55,740 >> Så vi kan være veldig sikker på å 1 e 10 til den negative 10. 710 00:38:55,740 --> 00:38:59,510 Så 1 ganger noe til negative 10, at hvis du gjør en tyngre bil, 711 00:38:59,510 --> 00:39:01,440 det vil ha dårligere miles per gallon. 712 00:39:01,440 --> 00:39:04,940 713 00:39:04,940 --> 00:39:07,250 Eller vi kan teste noen andre modellen. 714 00:39:07,250 --> 00:39:09,230 Som i stedet for regresjon av denne på vekt, 715 00:39:09,230 --> 00:39:12,600 la oss regress det på logg av vekt, fordi kanskje den effektive vekt 716 00:39:12,600 --> 00:39:15,690 på kjørelengde er liksom ikke lineær. 717 00:39:15,690 --> 00:39:18,540 >> Dette ga oss en r squared av 0,7528. 718 00:39:18,540 --> 00:39:19,610 Så la oss prøve dette. 719 00:39:19,610 --> 00:39:21,485 Denne gangen la oss gjøre en annen variabel, også. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Så sammendraget, Model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 All right, så igjen, vi fikk vår beste tilpasset linje her. 724 00:39:31,390 --> 00:39:36,160 Og dette tid-- dette sier, utgangspunktet at hver gang du 725 00:39:36,160 --> 00:39:38,090 øke vekten av en bil med en faktor på e 726 00:39:38,090 --> 00:39:40,580 du mister dette mange miles per gallon. 727 00:39:40,580 --> 00:39:43,210 728 00:39:43,210 --> 00:39:50,326 >> Og så denne gangen vår gjenværende standard feil it-- det spiller ingen rolle, egentlig. 729 00:39:50,326 --> 00:39:53,540 Den gjenværende standard feil er utgangspunktet bare standard feil 730 00:39:53,540 --> 00:39:57,760 at du har igjen etter at du har ta bort trendlinjen. 731 00:39:57,760 --> 00:40:02,805 Og vår r squared her er 0,81, som er litt bedre enn hva 732 00:40:02,805 --> 00:40:07,640 vi hadde før, 0.52. 733 00:40:07,640 --> 00:40:09,750 >> Og så nå la oss legge til en begrepet til denne regresjon. 734 00:40:09,750 --> 00:40:13,020 Så la oss regress miles per gallon både på loggen av vekter 735 00:40:13,020 --> 00:40:21,130 og, la oss gjøre, q miles, kvart mile tid. 736 00:40:21,130 --> 00:40:26,190 OK, det må ha the-- all right, qsec. 737 00:40:26,190 --> 00:40:26,690 Qsec. 738 00:40:26,690 --> 00:40:30,630 739 00:40:30,630 --> 00:40:35,000 Actually-- beklager, hva? 740 00:40:35,000 --> 00:40:37,000 La meg kalle dette noe andre foruten Model2. 741 00:40:37,000 --> 00:40:38,000 La meg kalle dette model3. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 Og så nå kan vi gjøre oppsummering model3. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 Og så igjen, dette er i utgangspunktet hva man kunne forvente. 746 00:40:49,100 --> 00:40:51,750 Du har positiv skjæringspunktet. 747 00:40:51,750 --> 00:40:54,550 Den effektive økende vekten er negativ. 748 00:40:54,550 --> 00:40:58,490 Og den effektive økende kvart mile tid 749 00:40:58,490 --> 00:41:02,420 er positive, men selv mindre enn vekt. 750 00:41:02,420 --> 00:41:06,010 Nå intuitivt, kan du få følelsen av dette ved å si tenke på sportsbiler. 751 00:41:06,010 --> 00:41:08,950 Det er en svært rask akselerasjon, en svært kort kvart mile ganger. 752 00:41:08,950 --> 00:41:13,729 De er også kommer til å bruke mer gass, mens mer fornuftige biler kommer 753 00:41:13,729 --> 00:41:16,020 å ha tregere akselerasjon, høyere kvart mile ganger, 754 00:41:16,020 --> 00:41:20,890 og bruke mindre gass ,, så høyere miles per gallon. 755 00:41:20,890 --> 00:41:21,390 Flott. 756 00:41:21,390 --> 00:41:23,431 Og så nå er det på tide å plotte noe sånt som dette. 757 00:41:23,431 --> 00:41:27,810 Så la oss do-- så nakent bein vi kan gjøre plots-- 758 00:41:27,810 --> 00:41:35,280 fordi jeg har lagt ved denne dataramme before-- vi kan bare gjøre tomter, vekt mpg. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Gjør dette til en litt større. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Der vi i utgangspunktet har en spredningsdiagram, men poengene 763 00:41:57,350 --> 00:41:58,690 er litt vanskelig å se på dette. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Jeg husker ikke offhand hva Syntaksen er for å endre plottet. 766 00:42:10,900 --> 00:42:14,100 Så jeg tror dette vil være en god tid for å få opp, 767 00:42:14,100 --> 00:42:18,000 det er en veldig fin innebygd hjelp funksjonen, hjelpe sitater fungere navn. 768 00:42:18,000 --> 00:42:21,690 Vi vil bringe opp i utgangspunktet noe du ønsker. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Jeg tror jeg vil faktisk gjøre dette typen er lik p for poeng plott. 771 00:42:32,730 --> 00:42:34,369 Visste at endre noe? 772 00:42:34,369 --> 00:42:35,160 Og nei, ikke egentlig. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Greit. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> For noen grunn, da jeg gjorde dette på min egen datamaskin for en stund siden, 777 00:42:49,580 --> 00:42:52,080 alle scatter poeng var mye klarere. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 Anyhow, er scatter slags synlig? 780 00:43:13,970 --> 00:43:15,124 Det er en der. 781 00:43:15,124 --> 00:43:16,165 Noen der, noen der. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 Du kan liksom se dem, ikke sant? 784 00:43:21,185 --> 00:43:24,310 Så hvis vi ønsker å legge et best mulig passform linje på denne tomten her, som er litt nakent 785 00:43:24,310 --> 00:43:29,290 bones-- la meg gjøre det litt hyggeligere. 786 00:43:29,290 --> 00:43:38,075 Hoved tilsvarer versus vekt. 787 00:43:38,075 --> 00:43:46,322 788 00:43:46,322 --> 00:43:49,740 Miles per gallon. 789 00:43:49,740 --> 00:43:53,570 Igjen, kan du se hvor nyttig valgfrie argumenter er her med også 790 00:43:53,570 --> 00:43:58,090 ikke å måtte sette ting i en bestemt rekkefølge med tastatur argumenter 791 00:43:58,090 --> 00:44:01,600 når du har tomter, fordi disse tar mye argumenter. 792 00:44:01,600 --> 00:44:07,490 >> XLAB lik vekt, vekt, tonn. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Greit. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, ja, denne enheten blir litt irriterende. 797 00:44:21,480 --> 00:44:30,160 Men du kan se liksom der oppe, det er en graf tittelen på siden. 798 00:44:30,160 --> 00:44:35,260 Over her there's-- på bunnen her er det akseetiketter. 799 00:44:35,260 --> 00:44:37,700 Jeg husker ikke offhand hva kommandoene ars-- 800 00:44:37,700 --> 00:44:41,000 hvilke funksjoner er å øke størrelsen på disse etikettene og titler, 801 00:44:41,000 --> 00:44:43,110 men de er der. 802 00:44:43,110 --> 00:44:46,625 >> Og så hvis vi ønsker å legge best mulig passform linje, 803 00:44:46,625 --> 00:44:49,250 vi kunne gjøre noe like-- jeg har syntaksen skrevet opp her. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Så husker vi bare legge modellen var mpg, vekt, mtcars. 806 00:45:11,130 --> 00:45:16,470 Og så hvis jeg ønsket å legge et best mulig passform linje, kunne jeg gjøre a, b linje modell. 807 00:45:16,470 --> 00:45:18,556 Og boom, har vi et best mulig passform linje. 808 00:45:18,556 --> 00:45:19,970 Det er litt vanskelig å se igjen. 809 00:45:19,970 --> 00:45:22,178 Jeg er ganske lei meg om teknologiske vanskeligheter. 810 00:45:22,178 --> 00:45:25,230 Men det går i utgangspunktet øverst til venstre til nederst til høyre. 811 00:45:25,230 --> 00:45:27,550 >> Og hvis skalaen var større, kan du se 812 00:45:27,550 --> 00:45:31,260 at skjæringspunktet er det du kan finne fra sammendragsstatistikk 813 00:45:31,260 --> 00:45:34,790 hvis du skriver sammendrag modell. 814 00:45:34,790 --> 00:45:40,130 OK, så jeg håper alle får noe av en følelse av hva 815 00:45:40,130 --> 00:45:42,030 R er, hva det er godt for. 816 00:45:42,030 --> 00:45:45,520 Du kan gjøre langt bedre plott enn dette på din egen tid, om du vil. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Så den utenlandske funksjon grensesnitt. 819 00:45:53,950 --> 00:46:00,330 Dette er noe som ikke er typisk dekket i innledende foredrag 820 00:46:00,330 --> 00:46:03,560 eller innledende noe for r. 821 00:46:03,560 --> 00:46:05,584 Det er ikke sannsynlig at du kommer til å trenge det. 822 00:46:05,584 --> 00:46:08,000 Men jeg fant det nyttig i mine egne prosjekter i fortiden. 823 00:46:08,000 --> 00:46:10,984 Og det er ingen god tutorial for det på nettet. 824 00:46:10,984 --> 00:46:12,900 Så jeg skal bare skynde deg gjennom hele denne 825 00:46:12,900 --> 00:46:16,606 og da er du fri til å forlate. 826 00:46:16,606 --> 00:46:18,480 Og så den utenlandske funksjon grensesnitt er hva 827 00:46:18,480 --> 00:46:23,130 du kan bruke til å ringe ut for å se funksjoner med en R. Internt 828 00:46:23,130 --> 00:46:29,850 R er bygget på C. R aritmetikk er bare C er 64-bit floating point aritmetikk, 829 00:46:29,850 --> 00:46:32,852 som er type dobbelt [uhørbart]. 830 00:46:32,852 --> 00:46:35,060 Og du vil kanskje gjøre dette for en rekke årsaker. 831 00:46:35,060 --> 00:46:39,250 For det er R tolkes, er det ikke kompilert ned til maskinkode. 832 00:46:39,250 --> 00:46:42,170 Så du kan skrive din indre sløyfer i C og deretter få 833 00:46:42,170 --> 00:46:45,920 fordelen med å bruke R. Som det er litt mer praktisk enn C. 834 00:46:45,920 --> 00:46:48,899 Den har bedre graf fasiliteter og whatnot. 835 00:46:48,899 --> 00:46:51,690 Og samtidig være i stand til å få toppfart ut av de indre sløyfer, 836 00:46:51,690 --> 00:46:53,650 som er der du virkelig trenger det. 837 00:46:53,650 --> 00:46:56,330 >> Gjenbruk av eksisterende C-biblioteker, det er også viktig. 838 00:46:56,330 --> 00:47:00,320 Hvis du har noen C-bibliotek for like, Jeg vet ikke, Fourier transformeres, 839 00:47:00,320 --> 00:47:05,190 eller noen veldig arkeikum statistikk prosedyre som brukes 840 00:47:05,190 --> 00:47:09,470 i høy energi astrofysikk eller noe, vet jeg ikke. 841 00:47:09,470 --> 00:47:13,058 Høy energi astrofysikk er ikke engang en tror, ​​tror jeg. 842 00:47:13,058 --> 00:47:16,480 Men du kan gjøre det i stedet for å måtte å skrive en innfødt R port av dem. 843 00:47:16,480 --> 00:47:22,725 Og på the-- og igjen, som om du ser i de fleste av R standardbiblioteker, 844 00:47:22,725 --> 00:47:25,600 på det innvendige, det innvendige er kommer til å bruke den utenlandske funksjon 845 00:47:25,600 --> 00:47:26,724 grensesnitt svært omfattende. 846 00:47:26,724 --> 00:47:31,630 De vil ha ting som Fourier forvandler eller databehandling korrelasjon 847 00:47:31,630 --> 00:47:34,890 koeffisienter skrevet i C, og de vil må bare R wrappers rundt dem. 848 00:47:34,890 --> 00:47:38,230 Grensesnittet er en litt vanskelig. jeg tenker 849 00:47:38,230 --> 00:47:43,750 dens vansker er overdrevet i en Mange av instruksjonene du finner. 850 00:47:43,750 --> 00:47:46,200 Men likevel er det litt forvirrende. 851 00:47:46,200 --> 00:47:48,650 Og jeg har ikke vært i stand til å finne en god tutorial for det, 852 00:47:48,650 --> 00:47:51,980 så dette er det akkurat nå. 853 00:47:51,980 --> 00:47:55,360 Igjen, dette hele segmentet er mer for senere bruk. 854 00:47:55,360 --> 00:47:57,687 Ikke bekymre deg om kopiering alt ned akkurat nå. 855 00:47:57,687 --> 00:48:00,020 Så følgende instruksjoner er for Unix-lignende systemer, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Jeg vet ikke hvordan dette fungerer på Windows, 857 00:48:05,150 --> 00:48:08,280 men du bare ikke gjør din avsluttende prosjekt på Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Du egentlig ikke vil. 860 00:48:12,460 --> 00:48:14,770 Unix er mye bedre sett opp for casual programmering. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Så, i utgangspunktet fremmed funksjon grensesnitt. 863 00:48:21,390 --> 00:48:24,420 Hvis du ønsker å skrive et C Funksjonen for bruk sammen med R, 864 00:48:24,420 --> 00:48:27,250 det har å ta alle argumenter som pekere. 865 00:48:27,250 --> 00:48:30,666 >> Så for enkeltverdier, dette betyr at det er pekt på verdien. 866 00:48:30,666 --> 00:48:33,040 For matriser, er dette en peker til det første elementet, hvilken 867 00:48:33,040 --> 00:48:36,750 er hva array-navn faktisk betyr. 868 00:48:36,750 --> 00:48:40,140 Igjen, dette er noe du bør ha pen helt ned etter p satt fem. 869 00:48:40,140 --> 00:48:43,334 Array navnene er bare pekere til det første element, 870 00:48:43,334 --> 00:48:44,750 Flyttallstypen er dobbel. 871 00:48:44,750 --> 00:48:47,310 Og din funksjon må returnere ugyldig. 872 00:48:47,310 --> 00:48:50,810 Den eneste måten at det kan faktisk fortelle R hva som skjedde 873 00:48:50,810 --> 00:48:54,410 er ved å endre minnet som R ga til det gjennom den utenlandske funksjon 874 00:48:54,410 --> 00:48:54,910 grensesnitt. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Så jeg har skrevet denne eksempel her, er dette 877 00:49:00,127 --> 00:49:02,460 en funksjon som beregner bruken Punktproduktet av de to vektorer. 878 00:49:02,460 --> 00:49:05,060 Det tar to argumenter, vec1, vec2, som er de vektorer selv, 879 00:49:05,060 --> 00:49:06,934 og n, som er en lengde, fordi igjen, 880 00:49:06,934 --> 00:49:12,630 R har innebygget [uhørbart] for å finne ut lengden av vektorene, men C ikke. 881 00:49:12,630 --> 00:49:16,182 I C er en vilkårlig vektorer avgrenset del av minnet. 882 00:49:16,182 --> 00:49:17,890 Så på den måten du kan beregne punkt produkter 883 00:49:17,890 --> 00:49:23,470 er bare å sette dette ut parameter til null og deretter iterere gjennom 884 00:49:23,470 --> 00:49:28,760 fra en til stjerne n, fordi n er en peker til lengden, 885 00:49:28,760 --> 00:49:32,929 bare legge noe til dette ut parameter. 886 00:49:32,929 --> 00:49:34,970 Og det kan være god praksis Hvis du kommer til å gjøre 887 00:49:34,970 --> 00:49:37,270 dette for å skrive to separate C-funksjoner. 888 00:49:37,270 --> 00:49:41,970 En av dem has-- en av dem bare tar argumentene og hvilke typer 889 00:49:41,970 --> 00:49:43,970 at de vanligvis ville være i C. 890 00:49:43,970 --> 00:49:47,780 >> Så det tar en matrise argumenter som pekere. 891 00:49:47,780 --> 00:49:57,090 Men single-verdi argumenter som n, det bare tar som verdier av kopi, 892 00:49:57,090 --> 00:49:57,917 uten pekere. 893 00:49:57,917 --> 00:49:59,750 Og da er det ikke [Uhørbart] ut pekeren. 894 00:49:59,750 --> 00:50:01,290 Og så kan du ha en annen, i utgangspunktet, 895 00:50:01,290 --> 00:50:03,623 wrapper funksjon som i utgangspunktet håndterer kravene 896 00:50:03,623 --> 00:50:07,740 av utenlandske funksjon grensesnitt for deg. 897 00:50:07,740 --> 00:50:11,840 >> Måten du kaller dette i R er, når du har din funksjon skrevet i C, 898 00:50:11,840 --> 00:50:17,770 du skriver R cmd shlib, R kommando delt bibliotek, 899 00:50:17,770 --> 00:50:20,110 foo dot c, eller hva filnavnet er, 900 00:50:20,110 --> 00:50:23,020 og OS skallet ikke er i R-terminalen. 901 00:50:23,020 --> 00:50:25,200 Og dette vil skape en bibliotek kalt foo dot så. 902 00:50:25,200 --> 00:50:28,180 Og så kan du legge det i vår script eller interaktivt 903 00:50:28,180 --> 00:50:32,310 med kommandoen dyn prikk belastning. 904 00:50:32,310 --> 00:50:35,720 Så er det en funksjon i R kalles dot c. 905 00:50:35,720 --> 00:50:39,310 >> Dette tar argumenter som er første navnet til funksjonen i C 906 00:50:39,310 --> 00:50:40,970 som du vil ringe. 907 00:50:40,970 --> 00:50:43,920 Og deretter alle parametere til denne funksjonen, 908 00:50:43,920 --> 00:50:45,420 de må være i riktig rekkefølge. 909 00:50:45,420 --> 00:50:48,580 Du må bruke disse type tvang funksjoner som heltall, som 910 00:50:48,580 --> 00:50:52,050 double, som karakter, og som logisk. 911 00:50:52,050 --> 00:50:54,710 Og så når det returnerer liste, som igjen er bare 912 00:50:54,710 --> 00:50:57,550 en tilhørende rekke av parameternavn og verdier 913 00:50:57,550 --> 00:51:00,950 etter at funksjonen har kjørt. 914 00:51:00,950 --> 00:51:08,520 >> Så i dette tilfellet, fordi dot prod har argumenter vec1, vec2, og int n, n ut. 915 00:51:08,520 --> 00:51:11,980 Til prikk c vi har dot prod, navnet på funksjonen 916 00:51:11,980 --> 00:51:16,250 vi ringer, vec1, vec2, type tvinge. 917 00:51:16,250 --> 00:51:20,060 Lengden av hver vektor, Jeg valgte bare vec1 vilkårlig. 918 00:51:20,060 --> 00:51:25,479 Det ville være mer robust å si s heltall min lengde på vec1, lengde vec2. 919 00:51:25,479 --> 00:51:27,520 Så akkurat som dobbel null, fordi vi egentlig ikke 920 00:51:27,520 --> 00:51:29,644 bryr seg hva som går inn i utparameter fordi vi er 921 00:51:29,644 --> 00:51:32,270 å sette den til null uansett. 922 00:51:32,270 --> 00:51:37,560 >> Og så resultatene kommer til å være en big forbundet rekke utgangspunktet 923 00:51:37,560 --> 00:51:42,090 vec1 er hva, er vec2 uansett. 924 00:51:42,090 --> 00:51:44,330 Men vi er interessert i ut, slik at vi kan få det ut. 925 00:51:44,330 --> 00:51:47,780 Dette er igjen, en meget leketøy f.eks av et fremmed funksjon grensesnitt. 926 00:51:47,780 --> 00:51:54,160 Men hvis du må beregne dot produkter av massive vektorer i sløyfer, 927 00:51:54,160 --> 00:51:56,960 eller hvis du trenger å gjøre noe annet i en løkke, 928 00:51:56,960 --> 00:51:59,850 og du ikke ønsker å stole på R, som har en bit av overhead 929 00:51:59,850 --> 00:52:02,830 bygget inn i den, kan dette være nyttig. 930 00:52:02,830 --> 00:52:05,870 >> Igjen, dette er ikke vanligvis en innledende emne til R. 931 00:52:05,870 --> 00:52:08,571 Det er ikke godt dokumentert. 932 00:52:08,571 --> 00:52:11,070 Jeg bare inkludert det fordi Jeg fant det nyttig i det siste. 933 00:52:11,070 --> 00:52:13,654 Så dårlig praksis. 934 00:52:13,654 --> 00:52:15,820 Jeg nevnte at det er en for loop i funksjonen. 935 00:52:15,820 --> 00:52:21,150 Vanligvis bør du ikke, i språket, ikke bruke den. 936 00:52:21,150 --> 00:52:26,100 Basert på hvor R implementerer køyring internt, kan det være treg. 937 00:52:26,100 --> 00:52:28,540 De bare ser også stygg. 938 00:52:28,540 --> 00:52:32,410 >> R håndterer vektorer veldig pent, så ofte du ikke trenger å bruke den. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Deretter kan du vanligvis erstatte en vektor ofte 941 00:52:38,900 --> 00:52:42,490 med disse funksjonene kalles høy bestillingsfunksjoner, kart, Redusere, 942 00:52:42,490 --> 00:52:44,404 Finn, eller Filter. 943 00:52:44,404 --> 00:52:46,320 Jeg vil bare gi noen eksempler på hva disse gjør. 944 00:52:46,320 --> 00:52:49,957 Kartet er en høyere ordens funksjon fordi det tar en funksjon som et argument. 945 00:52:49,957 --> 00:52:52,290 Så du kan gi den en funksjon, du kan gi den en matrise, 946 00:52:52,290 --> 00:52:54,640 og det vil gjelde funksjonen til hvert element i matrisen 947 00:52:54,640 --> 00:52:55,681 og returnere det nye utvalget. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Reduser, i utgangspunktet du gi det en rekke, gir du det 950 00:53:00,160 --> 00:53:02,930 en funksjon som tar to argumenter. 951 00:53:02,930 --> 00:53:07,100 Det vil gjelde funksjonen først, første argumentet med noen startverdi. 952 00:53:07,100 --> 00:53:09,440 Så til at resultatet i andre. 953 00:53:09,440 --> 00:53:12,590 Så til at resultatet i tredje, deretter til at resultatet i fjerde. 954 00:53:12,590 --> 00:53:14,870 Og så tilbake når det blir til slutt. 955 00:53:14,870 --> 00:53:17,620 Så for eksempel, hvis du ønsker å beregne summen av alle elementene 956 00:53:17,620 --> 00:53:23,240 i en matrise, enn du kan kalle redusere med [uhørbart] redusere et tillegg 957 00:53:23,240 --> 00:53:26,620 funksjon, som func a, b, returnere en pluss b. 958 00:53:26,620 --> 00:53:28,960 Og deretter starte en verdi på 0. 959 00:53:28,960 --> 00:53:32,950 >> Og alle disse, kan du finne dem beskrevet i R dokumentasjon, 960 00:53:32,950 --> 00:53:35,720 i noen lærebok i funksjonell programmering. 961 00:53:35,720 --> 00:53:38,330 Det er også denne klassen av funksjoner kalt gjelder funksjoner, 962 00:53:38,330 --> 00:53:42,807 som jeg don't-- de er litt vanskelig å forklare, 963 00:53:42,807 --> 00:53:45,640 men hvis du ser på [uhørbart] bestilt som jeg siterte i begynnelsen, 964 00:53:45,640 --> 00:53:48,615 Han forklarer dem ganske godt i blindtarmen på R programmering. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Mer om praksis, føye til vektorer. 967 00:53:53,390 --> 00:53:57,570 968 00:53:57,570 --> 00:53:58,070 Yeah? 969 00:53:58,070 --> 00:54:01,651 970 00:54:01,651 --> 00:54:02,900 Jeg tror jeg skal rette opp dette. 971 00:54:02,900 --> 00:54:07,450 I den første linjen, vec pil, at pilen skal ikke være der. 972 00:54:07,450 --> 00:54:10,920 Du kan tildele en vektor, på nytt, ved å ta dens lengde pluss ett 973 00:54:10,920 --> 00:54:13,220 og tildele noen verdi for det. 974 00:54:13,220 --> 00:54:18,970 Som vil utvide vektoren, eller kan gjøre VEC tilsvarer c, vec NewValue. 975 00:54:18,970 --> 00:54:21,540 Igjen, hvis du bruker C med ett argument som en vektor, 976 00:54:21,540 --> 00:54:23,300 den resulterende hierarkiet blir flat. 977 00:54:23,300 --> 00:54:27,160 Så vil du bare få en vektor som er forlenget med ett. 978 00:54:27,160 --> 00:54:30,410 Aldri gjør dette. 979 00:54:30,410 --> 00:54:33,330 >> Grunnen til at du bør ikke gjøre dette på er dette. 980 00:54:33,330 --> 00:54:37,430 Når du tildele en vektor, det gir den en viss mengde minne. 981 00:54:37,430 --> 00:54:40,680 Hvis du øker som vektor størrelse, det har å omdisponere vektoren 982 00:54:40,680 --> 00:54:43,820 et annet sted. 983 00:54:43,820 --> 00:54:46,980 Og så omfordeling er ganske dyrt. 984 00:54:46,980 --> 00:54:50,530 Jeg vil ikke gå inn i detaljer om hvordan minne allocators er implementert 985 00:54:50,530 --> 00:54:57,280 på operativsystemnivå, men det tar mye tid 986 00:54:57,280 --> 00:54:58,962 å finne en ny del av minnet. 987 00:54:58,962 --> 00:55:00,920 Og også, hvis du er re-allokere mye og mange 988 00:55:00,920 --> 00:55:03,500 av stadig større biter, ender du opp 989 00:55:03,500 --> 00:55:06,420 med noe som kalles minne fragmentering, 990 00:55:06,420 --> 00:55:09,390 hvor det tilgjengelige minnet er delt inn i mange små blokker 991 00:55:09,390 --> 00:55:11,500 i minne allocators synspunkt. 992 00:55:11,500 --> 00:55:15,340 Og det blir vanskeligere og vanskeligere å finne minne for andre ting. 993 00:55:15,340 --> 00:55:19,455 Så i stedet, hvis du trenger å gjøre dette, hvis du trenger for å vokse en vektor fra den ene enden 994 00:55:19,455 --> 00:55:24,240 til den neste, i stedet for å føye til den hele tiden, bør du forhånds fordele det. 995 00:55:24,240 --> 00:55:29,310 Vec pil, vektorlengden lik 1000, eller hva. 996 00:55:29,310 --> 00:55:33,200 >> Og så kan du bare tildele til vektoren verdier man 997 00:55:33,200 --> 00:55:36,000 en tid etter at du har tildelt det en gang. 998 00:55:36,000 --> 00:55:40,140 Jeg løp inn i dette, igjen, min sommerjobb da jeg skrev NRA differensial 999 00:55:40,140 --> 00:55:42,120 ligningsløseren. 1000 00:55:42,120 --> 00:55:43,180 Ikke symbolsk numerisk. 1001 00:55:43,180 --> 00:55:49,290 Tanken er at når du har én verdi for din løsning, 1002 00:55:49,290 --> 00:55:51,240 du bruke den til å beregne den neste. 1003 00:55:51,240 --> 00:55:53,700 Så min naturlige naive tilbøyelighet var å si OK, 1004 00:55:53,700 --> 00:55:56,930 så jeg skal begynne med en vektor det er en betydelig verdi. 1005 00:55:56,930 --> 00:56:01,260 Beregn fra at den neste verdien som går inn på min løsning vektor, 1006 00:56:01,260 --> 00:56:02,630 og legge det. 1007 00:56:02,630 --> 00:56:05,290 >> Lag noe annet, føyer det. 1008 00:56:05,290 --> 00:56:08,120 Det gikk veldig, veldig sakte. 1009 00:56:08,120 --> 00:56:11,540 Og når jeg innså dette og jeg endret mitt system 1010 00:56:11,540 --> 00:56:16,020 fra føye til denne vektoren som 10.000 til 100 000 ganger, 1011 00:56:16,020 --> 00:56:18,910 å bare pre-tildeling av en vektor og bare kjøre med det. 1012 00:56:18,910 --> 00:56:22,100 Jeg fikk mer enn 1000 fold fart opp. 1013 00:56:22,100 --> 00:56:26,280 Så dette er en svært vanlig felle for R programmering. 1014 00:56:26,280 --> 00:56:31,560 Hvis du trenger å bygge opp en vektor bit for bit, pre-fordele den. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> En annen vanlig tur opp-- dette er min siste slide, ikke worry-- er feilbehandling. 1017 00:56:40,240 --> 00:56:42,890 R, for å være ærlig, ikke virkelig gjøre dette veldig bra. 1018 00:56:42,890 --> 00:56:45,010 Det er mange av problemer som kan beskjære opp. 1019 00:56:45,010 --> 00:56:48,360 For eksempel, hvis du får en matrise eller en vektor ut av funksjon 1020 00:56:48,360 --> 00:56:52,377 at du ventet en enkelt verdi å komme fra, eller vice versa, 1021 00:56:52,377 --> 00:56:55,460 og du passerer det inn en funksjon som du skrev venter en enkelt verdi, 1022 00:56:55,460 --> 00:56:57,270 som kan være et problem. 1023 00:56:57,270 --> 00:57:01,440 >> Enkelte funksjoner returnere null som gjør, sier, 1024 00:57:01,440 --> 00:57:05,560 leser fra en ikke-eksisterende nøkkelen i en liste. 1025 00:57:05,560 --> 00:57:08,527 Men null er ikke som C der hvis du forsøker å lese 1026 00:57:08,527 --> 00:57:11,360 fra en gammel pekeren, [uhørbart] å nullpeker, det bare SEG feil 1027 00:57:11,360 --> 00:57:14,109 og hvis du er i din debugger det forteller deg nøyaktig hvor du er. 1028 00:57:14,109 --> 00:57:17,080 1029 00:57:17,080 --> 00:57:20,772 I stedet, null vil do-- funksjoner vil gjøre uforutsigbare ting 1030 00:57:20,772 --> 00:57:21,730 hvis de er overlevert null. 1031 00:57:21,730 --> 00:57:24,575 Som hvis du er levert max null, det vil gi deg negative uendelig. 1032 00:57:24,575 --> 00:57:27,230 1033 00:57:27,230 --> 00:57:28,190 Og så, ja. 1034 00:57:28,190 --> 00:57:30,880 1035 00:57:30,880 --> 00:57:32,630 Og så skjedde dette til meg en gang da jeg hadde 1036 00:57:32,630 --> 00:57:34,771 endret en haug med felt i min liste struktur 1037 00:57:34,771 --> 00:57:37,520 gang uten å endre dem andre steder når jeg leste fra dem. 1038 00:57:37,520 --> 00:57:40,670 Og så fikk jeg alle slags tilfeldig evighets resultater beskjæring opp 1039 00:57:40,670 --> 00:57:43,080 og jeg aner ikke hvor de kom fra. 1040 00:57:43,080 --> 00:57:45,310 Og dessverre, det er ingen reell R streng modus 1041 00:57:45,310 --> 00:57:48,940 der du kan si om noe ser ut som det kan være en feil, 1042 00:57:48,940 --> 00:57:51,960 bare stoppe der, så jeg kan være disiplinert og fikse det. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 Men det er noe kalt stopp hvis ikke. 1045 00:57:57,240 --> 00:58:00,480 Dette tilsvarer Cs hevde, hvis du har snakket om det. 1046 00:58:00,480 --> 00:58:02,690 Jeg tror ikke C hevde er et foredrag tema, 1047 00:58:02,690 --> 00:58:06,370 men din seksjonsleder kan ha gått over det. 1048 00:58:06,370 --> 00:58:10,393 Og stoppe hvis ikke i utgangspunktet tar noen predikat, så enhver uttalelse som 1049 00:58:10,393 --> 00:58:11,824 kan være sant eller usant. 1050 00:58:11,824 --> 00:58:13,490 Og hvis det er falsk, det stopper sitt program. 1051 00:58:13,490 --> 00:58:18,260 Den forteller deg nøyaktig hva linje du var på, og hvilken tilstand mislyktes. 1052 00:58:18,260 --> 00:58:21,910 >> Og dette svært nyttig, for eksempel, tilregnelighet sjekking, funksjons innganger. 1053 00:58:21,910 --> 00:58:25,110 Så hvis du har en funksjon og du forventer, sier, 1054 00:58:25,110 --> 00:58:29,640 hvis du skulle gi meg en date, jeg vil ha dato er bare en vektor av lengde 1 1055 00:58:29,640 --> 00:58:31,735 og et sted mellom 1 og 31. 1056 00:58:31,735 --> 00:58:34,420 1057 00:58:34,420 --> 00:58:36,170 Og hvis ikke, jeg vet noe har gått galt. 1058 00:58:36,170 --> 00:58:40,280 Og jeg velger å stoppe det før dette har tilfeldig banker på effekter med kode 1059 00:58:40,280 --> 00:58:44,190 at det er vanskeligere å spore gjennom. 1060 00:58:44,190 --> 00:58:47,170 Så det er en mulig bruke for stopp hvis ikke. 1061 00:58:47,170 --> 00:58:48,660 >> Anyhow, OK. 1062 00:58:48,660 --> 00:58:49,690 Så det er slutt. 1063 00:58:49,690 --> 00:58:51,290 Tusen takk for at du kom. 1064 00:58:51,290 --> 00:58:53,710 Jeg er en amatør på dette. 1065 00:58:53,710 --> 00:58:57,270 Så beklager hvis du kjeder eller forvirret eller hva har du. 1066 00:58:57,270 --> 00:59:01,670 Jeg er glad for å ta spørsmål via e-post på connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Dette gjelder også for alle ser dette live eller senere. 1068 00:59:07,230 --> 00:59:10,190 Også, selv om jeg ikke er en TF, er jeg også veldig 1069 00:59:10,190 --> 00:59:13,900 villig til å tjene som en uoffisiell rådgiver for alle som er 1070 00:59:13,900 --> 00:59:15,460 ved hjelp av R i et avsluttende prosjekt. 1071 00:59:15,460 --> 00:59:19,900 >> Hvis du ønsker til det, så bare snakk med din TF 1072 00:59:19,900 --> 00:59:23,750 og deretter skrive meg en e-post så Jeg vet hva du jobber med 1073 00:59:23,750 --> 00:59:26,680 og slik at jeg kan sette opp møtet ganger med deg hvis du vil. 1074 00:59:26,680 --> 00:59:27,990 Så igjen, tusen takk. 1075 00:59:27,990 --> 00:59:28,960 Jeg håper du likte den. 1076 00:59:28,960 --> 00:59:29,450 >> PUBLIKUM: [uhørlig]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Selvfølgelig. 1078 00:59:30,617 --> 00:59:34,910 >> PUBLIKUM: Hva slags prosjekt ville en CS student bruke R for? 1079 00:59:34,910 --> 00:59:37,427 1080 00:59:37,427 --> 00:59:40,510 CONNER HARRIS: Så hvis du ikke gjør noe som er rent i data mining, 1081 00:59:40,510 --> 00:59:43,790 for eksempel, og der er mange ting 1082 00:59:43,790 --> 00:59:46,692 du kan gjøre med det med data gruvedrift og maskinlæring. 1083 00:59:46,692 --> 00:59:48,900 Du ønsker kanskje å bruke R for en komponent av noe. 1084 00:59:48,900 --> 00:59:52,022 Jeg tok opp, opprinnelig eksempelet av hvis du skriver en nettside 1085 00:59:52,022 --> 00:59:54,730 og du vil kjøre automatisert statistisk analyse av serveren 1086 00:59:54,730 --> 00:59:57,990 logger på et bestemt tidspunkt hver dag, det kan være noe som er 1087 00:59:57,990 --> 01:00:01,260 veldig enkelt å gjøre i løpet av et kort R skript som du kan planlegge 1088 01:00:01,260 --> 01:00:04,200 å kjøre hver kveld, for eksempel. 1089 01:00:04,200 --> 01:00:06,550 >> Og jeg er sikker på, hvis det er noen grunn til at du vil 1090 01:00:06,550 --> 01:00:11,520 Vil statistikk eller grafiske mulighetene og har denne kjøre automatisk i stedet 1091 01:00:11,520 --> 01:00:13,790 for å måtte kommunisere med ting i Excel, 1092 01:00:13,790 --> 01:00:16,750 for eksempel, det er noe kan det være lurt å bruke R for. 1093 01:00:16,750 --> 01:00:21,190 Så noen flere spørsmål før jeg drar? 1094 01:00:21,190 --> 01:00:21,690 Nei? 1095 01:00:21,690 --> 01:00:24,960 Greit, vel, igjen, takk takk for at du kom. 1096 01:00:24,960 --> 01:00:29,417