1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Stadig jeg tror nogle spændende video 3 00:00:07,690 --> 00:00:12,570 produceret af en professionel rådgivning der bruger R meget i sit arbejde. 4 00:00:12,570 --> 00:00:16,329 >> Fortæller: Hvad er bag statistikken, Analytics, og visualiseringer 5 00:00:16,329 --> 00:00:19,770 at nutidens dygtigste data forskere og erhvervsledere er afhængige af 6 00:00:19,770 --> 00:00:22,012 at gøre kraftfulde beslutninger? 7 00:00:22,012 --> 00:00:23,540 Du må ikke altid se det. 8 00:00:23,540 --> 00:00:24,790 Men det er der. 9 00:00:24,790 --> 00:00:29,460 Det hedder R, open source r-- den statistisk programmeringssprog 10 00:00:29,460 --> 00:00:32,630 at de registrerede eksperter verden løbet brug for alt 11 00:00:32,630 --> 00:00:35,350 fra kortlægning bred social og markedsføring tendenser online 12 00:00:35,350 --> 00:00:39,210 at udvikle den finansielle og klima modeller, der hjælper drive vores økonomier 13 00:00:39,210 --> 00:00:40,780 og lokalsamfund. 14 00:00:40,780 --> 00:00:44,910 >> Men hvad er R og hvor har R starte? 15 00:00:44,910 --> 00:00:48,620 Nå oprindeligt, R startede her med to professorer 16 00:00:48,620 --> 00:00:51,950 der ønskede en bedre statistisk platform for deres elever. 17 00:00:51,950 --> 00:00:56,030 Så de skabte en modelleret efter statistiske sprog S. 18 00:00:56,030 --> 00:01:00,480 De, sammen med mange andre, holdes arbejder med og brug af R, 19 00:01:00,480 --> 00:01:05,489 skabe værktøjer til R og finde nye ansøgninger om R hver dag. 20 00:01:05,489 --> 00:01:07,750 >> Takket være dette er verdensomspændende fællesskab indsats, 21 00:01:07,750 --> 00:01:11,850 R holdes vokser med tusindvis af brugeroprettede biblioteker bygget 22 00:01:11,850 --> 00:01:15,500 at øge R funktionalitet og crowd-fremskaffede validering kvalitet 23 00:01:15,500 --> 00:01:19,740 og støtte fra de mest anerkendte industriens ledere på alle områder, der 24 00:01:19,740 --> 00:01:25,040 bruger R. Hvilket er stor, fordi R er den bedste til, hvad den gør. 25 00:01:25,040 --> 00:01:28,540 Spirende eksperter hurtigt og let fortolke, interagere med, 26 00:01:28,540 --> 00:01:33,790 og visualisere data viser deres hastigt voksende fællesskab af R-brugere på verdensplan 27 00:01:33,790 --> 00:01:36,380 og se, hvordan open source R fortsat forme 28 00:01:36,380 --> 00:01:39,340 fremtiden for statistisk analyse og data videnskab. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, stor. 31 00:01:47,710 --> 00:01:50,360 Så min egen præsentation vil være en smule mere ædru. 32 00:01:50,360 --> 00:01:54,380 Det vil ikke indebære, at meget spændende baggrundsmusik. 33 00:01:54,380 --> 00:01:59,160 Men som du så i videoen, R er sortering af en generel purpose program sprog. 34 00:01:59,160 --> 00:02:03,720 Men det blev oprettet meste til statistisk arbejde. 35 00:02:03,720 --> 00:02:07,980 >> Så det er designet til statistik, til dataanalyse, for data mining. 36 00:02:07,980 --> 00:02:12,420 Og så du kan se dette i en masse de designvalg, at skaberne af R 37 00:02:12,420 --> 00:02:13,320 fremstillet. 38 00:02:13,320 --> 00:02:15,472 Den er designet til stort set, folk, der ikke 39 00:02:15,472 --> 00:02:17,930 eksperter i programmering, der er bare optagning programmering 40 00:02:17,930 --> 00:02:23,460 på den side, så de kan gøre deres arbejde i samfundsfag eller i statistik 41 00:02:23,460 --> 00:02:25,440 eller hvad. 42 00:02:25,440 --> 00:02:27,850 >> Det har en masse meget vigtige forskelle fra C. 43 00:02:27,850 --> 00:02:33,200 Men syntaksen og paradigmer at den bruger stort set den samme. 44 00:02:33,200 --> 00:02:36,830 Og du bør føle sig temmelig meget hjemme ret off the bat. 45 00:02:36,830 --> 00:02:38,520 Det er en absolut nødvendighed sprog. 46 00:02:38,520 --> 00:02:40,260 >> Må ikke bekymre dig for meget om, at hvis du ikke kender udtrykket. 47 00:02:40,260 --> 00:02:42,676 Men der er en forskel mellem bydende nødvendigt, deklarativ, 48 00:02:42,676 --> 00:02:43,810 og funktionelle. 49 00:02:43,810 --> 00:02:47,600 Bydende nødvendigt bare betyder, at du gør udsagn, der er dybest set kommandoer. 50 00:02:47,600 --> 00:02:52,340 Og så tolken eller computer følger dem én efter én. 51 00:02:52,340 --> 00:02:56,630 Det er svagt indtastet, er der ingen type erklæringer i R. 52 00:02:56,630 --> 00:02:59,130 >> Og derefter linjerne mellem forskellige typer 53 00:02:59,130 --> 00:03:03,920 er en smule mere løs end de er i C, f.eks. 54 00:03:03,920 --> 00:03:06,450 Og som jeg sagde, at der er meget omfattende faciliteter 55 00:03:06,450 --> 00:03:15,610 til graftegning, til statistisk analyse, for data mining. 56 00:03:15,610 --> 00:03:19,540 Disse er begge indbygget i sprog og som videoen sagde, 57 00:03:19,540 --> 00:03:23,680 tusindvis af tredjeparts biblioteker, du kan downloade og bruge gratis 58 00:03:23,680 --> 00:03:25,340 med meget løs licensbetingelser. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Så generelt vil jeg anbefale at du ser på disse to bøger 61 00:03:31,500 --> 00:03:34,610 Hvis du kommer til at arbejde på R. One af dem er officielle R begynderniveau 62 00:03:34,610 --> 00:03:35,110 guide. 63 00:03:35,110 --> 00:03:38,660 Det vedligeholdes af core udviklere af R. 64 00:03:38,660 --> 00:03:42,400 Du kan downloade det igen, fri for opkræve og juridisk på det link der. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Alle disse dias kommer til at gå op på internettet, på CS50 hjemmeside 67 00:03:49,869 --> 00:03:50,660 Når dette er gjort. 68 00:03:50,660 --> 00:03:53,690 Så ingen grund til at kopiere ting ned febrilsk. 69 00:03:53,690 --> 00:03:56,800 >> Den anden er en lærebog af Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 der er en statistik professor ved Carnegie Mellon, kaldet Advanced Data 71 00:04:00,100 --> 00:04:02,160 Analyse fra en Elementær Point of View. 72 00:04:02,160 --> 00:04:04,010 Dette er ikke primært en R bog. 73 00:04:04,010 --> 00:04:07,130 Det er en statistik bog og det er en dataanalyse bog. 74 00:04:07,130 --> 00:04:11,990 Men det er meget tilgængelige for folk, der have et minimum af statistik viden. 75 00:04:11,990 --> 00:04:13,750 >> Jeg har aldrig taget en formel kursus. 76 00:04:13,750 --> 00:04:17,269 Jeg ved bare, stumper og stykker fra forskellige allierede fag 77 00:04:17,269 --> 00:04:18,579 at jeg har taget kurser i. 78 00:04:18,579 --> 00:04:21,839 Og jeg var i stand til at forstå det udmærket. 79 00:04:21,839 --> 00:04:25,630 >> Alle tallene er givet i R. De er lavet i F 80 00:04:25,630 --> 00:04:30,280 og de har også kodelistningerne under hver figur, der fortæller dig 81 00:04:30,280 --> 00:04:33,270 hvordan du gør hver figur med R-kode. 82 00:04:33,270 --> 00:04:37,400 Og det er meget nyttigt, hvis du forsøger at efterligne 83 00:04:37,400 --> 00:04:38,650 nogle tal, du ser i en bog. 84 00:04:38,650 --> 00:04:47,840 >> Og igen gratis download stat.cmu.edu/cshalizi/ Beklager, 85 00:04:47,840 --> 00:04:50,230 der bør skråstreg tilde cshalizi. 86 00:04:50,230 --> 00:04:53,150 Jeg vil sørge for at korrigere når de officielle dias gå op. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV som er lige det akronym af bogen titel. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Så generelle caveats-- R har en masse muligheder. 90 00:05:02,500 --> 00:05:05,331 Jeg vil kun være i stand til at dække overfladen af ​​en masse ting. 91 00:05:05,331 --> 00:05:08,580 Også den første del af seminaret kommer til at være noget af en data dump. 92 00:05:08,580 --> 00:05:11,437 Jeg er helt ked af det. 93 00:05:11,437 --> 00:05:13,770 Dybest set, vil jeg introducere dig til en masse ting 94 00:05:13,770 --> 00:05:15,350 ret off the bat, går så hurtigt som muligt. 95 00:05:15,350 --> 00:05:17,058 Og så får vi til den sjove del, som er 96 00:05:17,058 --> 00:05:20,570 demoen, hvor jeg kan vise dig alt at vi har talt om på skærmen. 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å der kommer til at være en masse af tekniske ting kastet op på her. 99 00:05:26,070 --> 00:05:28,060 Må ikke bekymre dig om at kopiere alt det ned. 100 00:05:28,060 --> 00:05:31,740 Fordi A, kan du få alle de ting på CS50 hjemmeside senere. 101 00:05:31,740 --> 00:05:37,780 Og B, det er egentlig ikke så vigtigt at huske dette fra dias. 102 00:05:37,780 --> 00:05:40,462 Det er mere vigtigt, at du får nogle intuitive anlæg med det 103 00:05:40,462 --> 00:05:44,220 og der kommer fra bare at spille rundt. 104 00:05:44,220 --> 00:05:45,720 >> Så hvorfor bruge R? 105 00:05:45,720 --> 00:05:49,440 Dybest set, hvis du har et projekt, indebærer minedrift store datasæt, data 106 00:05:49,440 --> 00:05:52,664 visualisering, du skal bruge R. Hvis du er 107 00:05:52,664 --> 00:05:55,830 gør komplicerede statistiske analyser, det ville være vanskeligt i Excel, 108 00:05:55,830 --> 00:05:58,010 for eksempel, ville det også god-- også 109 00:05:58,010 --> 00:06:00,506 hvis du laver statistisk analyse, der er automatiseret. 110 00:06:00,506 --> 00:06:02,130 Lad os sige, at du opretholde en hjemmeside. 111 00:06:02,130 --> 00:06:06,320 Og du ønsker at læse serverens log hver dag og kompilere nogle liste, 112 00:06:06,320 --> 00:06:10,320 Ligesom de bedste lande, dine brugere kommer fra, 113 00:06:10,320 --> 00:06:15,100 nogle summariske statistikker om, hvor lang tid de bruger på dit websted eller hvad. 114 00:06:15,100 --> 00:06:16,910 Og du ønsker at køre dette hver dag. 115 00:06:16,910 --> 00:06:20,280 >> Nu, hvis du gør dette i Excel, du er nødt til at gå til din server log, 116 00:06:20,280 --> 00:06:23,490 importere det ind i en Excel data regneark, 117 00:06:23,490 --> 00:06:24,910 kører hele analysen manuelt. 118 00:06:24,910 --> 00:06:27,100 Med R, kan du bare skrive en script. 119 00:06:27,100 --> 00:06:29,520 Planlæg det til at køre hver dag fra styresystemet. 120 00:06:29,520 --> 00:06:33,657 Og så hver aften på 2:00 AM, eller når du planlægge det til at køre, 121 00:06:33,657 --> 00:06:35,990 det vil se gennem din internet trafik for den pågældende dag. 122 00:06:35,990 --> 00:06:39,010 Og så ved den næste dag, vil du har denne skinnende, ny rapport 123 00:06:39,010 --> 00:06:41,710 eller hvad med alle de oplysninger, du har bedt om. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Så dybest set R er til Cisco programmering versus Cisco analyse. 126 00:06:50,217 --> 00:06:51,050 Indledende er gjort. 127 00:06:51,050 --> 00:06:53,104 Lad os komme ind i de virkelige ting. 128 00:06:53,104 --> 00:06:55,020 Så der er tre reelle typer i sproget. 129 00:06:55,020 --> 00:06:56,120 Der er numerisk type. 130 00:06:56,120 --> 00:07:01,250 Der er en slags en forskel mellem heltal og flydende punkter, 131 00:07:01,250 --> 00:07:02,769 men ikke rigtig. 132 00:07:02,769 --> 00:07:04,560 Der er en karakter skriver, som er strenge. 133 00:07:04,560 --> 00:07:07,100 Og der er en logisk skriver, hvilket er Booleans. 134 00:07:07,100 --> 00:07:11,080 >> Og du kan konvertere mellem typer ved hjælp af disse funktioner 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 forsøge at læse, at strengen som et tal, på samme måde 138 00:07:20,030 --> 00:07:25,897 at A2I og scanf gør, og C. Hvis du kalder som numerisk på sand eller falsk 139 00:07:25,897 --> 00:07:26,980 det vil konvertere til 1 eller 0. 140 00:07:26,980 --> 00:07:29,110 Hvis du ringer som karakter på noget det vil 141 00:07:29,110 --> 00:07:32,550 konvertere det til et string repræsentation. 142 00:07:32,550 --> 00:07:34,990 >> Og så er der vektorer og matricer. 143 00:07:34,990 --> 00:07:37,580 Så vektorer er dybest set 1 dimensionelle arrays. 144 00:07:37,580 --> 00:07:40,600 De er det, vi kalder arrays i C. Matricer, 2 dimensionelle arrays. 145 00:07:40,600 --> 00:07:42,350 Og derefter højere dimensionelle arrays, du kan 146 00:07:42,350 --> 00:07:48,560 har 3, 4, 5 dimensioner eller hvad af numeriske værdier, af strygere, 147 00:07:48,560 --> 00:07:52,860 af logiske værdier. 148 00:07:52,860 --> 00:07:55,380 >> Du har også lister, som er en slags associative array. 149 00:07:55,380 --> 00:07:57,390 Jeg får ind i denne lidt. 150 00:07:57,390 --> 00:07:59,390 Så en vigtig ting der ture folk op i F 151 00:07:59,390 --> 00:08:01,470 er, at der ikke er nogen reelle, rene atomare typer. 152 00:08:01,470 --> 00:08:05,870 Der er ingen reelle forskel mellem et nummer, som en numerisk værdi, 153 00:08:05,870 --> 00:08:07,920 og en liste over numeriske værdier. 154 00:08:07,920 --> 00:08:12,370 Numeriske værdier er faktisk den samme som vektorerne med en længde 1. 155 00:08:12,370 --> 00:08:14,959 Og det har en række vigtige konsekvenser. 156 00:08:14,959 --> 00:08:17,500 One, betyder det, at du kan gøre ting meget let, der involverer 157 00:08:17,500 --> 00:08:21,037 gerne tilføje et nummer til en vektor. 158 00:08:21,037 --> 00:08:23,120 R vil som udgangspunkt figur ud, hvad du mener med det. 159 00:08:23,120 --> 00:08:24,610 Og jeg vil komme til at i et sekund. 160 00:08:24,610 --> 00:08:27,930 Det betyder også, at der er ingen måde for den type checker-- i det omfang 161 00:08:27,930 --> 00:08:30,530 at noget lignende findes i r-- fortælle 162 00:08:30,530 --> 00:08:33,780 når du har bestået i det indre værdi når det forventer en matrix eller omvendt. 163 00:08:33,780 --> 00:08:39,159 Og som kan forårsage nogle mærkelige problemer, som jeg løb ind, når 164 00:08:39,159 --> 00:08:42,252 Jeg var ved hjælp af R under min sommer job. 165 00:08:42,252 --> 00:08:43,710 Og der er ingen mixed-type arrays. 166 00:08:43,710 --> 00:08:46,543 Så du kan ikke have et array var første elementer er, ved jeg ikke, 167 00:08:46,543 --> 00:08:49,332 strengen "John" og andet element er nummer 42. 168 00:08:49,332 --> 00:08:52,540 Hvis du forsøger at gøre det, så vil du få alt bare omdannes til en streng. 169 00:08:52,540 --> 00:08:54,760 Så vi har strengen John, snor 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Så usædvanligt syntaktisk features-- fleste R syntaks er meget lig C. 172 00:09:02,025 --> 00:09:04,690 Der er et par vigtige forskelle. 173 00:09:04,690 --> 00:09:05,620 Typing er meget svag. 174 00:09:05,620 --> 00:09:07,360 Så der er ingen variable erklæringer. 175 00:09:07,360 --> 00:09:12,670 Opgave bruger den mærkelige fejl, mindre end bindestreg. 176 00:09:12,670 --> 00:09:15,340 Kommentarer er med hash-mærket. 177 00:09:15,340 --> 00:09:19,230 Jeg gætter nu dage vi kalder det hashtag selvom det er ikke rigtig accurate-- ikke 178 00:09:19,230 --> 00:09:21,810 dobbelt skråstreg. 179 00:09:21,810 --> 00:09:24,710 >> Modular rester er med %% tegn. 180 00:09:24,710 --> 00:09:30,172 Heltalsdivision er med% /%, hvilket er meget svært at læse, når det er fremskrevet 181 00:09:30,172 --> 00:09:30,880 op på skærmen. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 Du kan få intervaller af heltal med tyktarmen. 184 00:09:37,200 --> 00:09:41,840 Så 2,5 vil give dig en vektor af alle de numre 2 til 5. 185 00:09:41,840 --> 00:09:44,530 >> Arrays er en indekseret, hvilke skruer en masse mennesker 186 00:09:44,530 --> 00:09:47,540 op, hvis de er fra mere typiske programmeringssprog, 187 00:09:47,540 --> 00:09:50,450 som C, hvor de fleste tingene er nul-indekseret. 188 00:09:50,450 --> 00:09:54,420 Igen, dette er, hvor R arv som et sprog for ligesom ikke 189 00:09:54,420 --> 00:09:56,560 professionelle programmører kommer i. 190 00:09:56,560 --> 00:09:59,680 Hvis du er en sociolog eller en økonom eller noget 191 00:09:59,680 --> 00:10:01,980 og du forsøger at bruge R dybest set som et supplement 192 00:10:01,980 --> 00:10:03,832 til din vigtigere professionelle arbejde, 193 00:10:03,832 --> 00:10:06,040 du kommer til at finde en indeksering lidt mere naturligt. 194 00:10:06,040 --> 00:10:09,890 Fordi du begynde at tælle ved 1 i hverdagen, ikke er 0. 195 00:10:09,890 --> 00:10:13,260 >> For-loops, dette svarer til den foreach konstruere i PHP, 196 00:10:13,260 --> 00:10:17,090 som du kommer til at lære in-- temmelig snart. 197 00:10:17,090 --> 00:10:22,540 Hvilket er for værdi i vektor og så kan du gøre ting med værdi. 198 00:10:22,540 --> 00:10:24,040 PUBLIKUM: Det er kommet op i foredrag. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Åh, det er komme op foredrag fremragende. 200 00:10:26,248 --> 00:10:29,815 PUBLIKUM: Opgaven, er det formodes at pege fra højre til venstre? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: Fra højre til venstre, ja. 202 00:10:31,440 --> 00:10:34,720 Du kan tænke på det som værdien på højre skubbet ind i variable 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 endelig funktion syntaks er en smule mærkeligt. 207 00:10:42,330 --> 00:10:48,460 Du har funktionen navnet foo, tildelte til dette nøgleordet funktion, efterfulgt 208 00:10:48,460 --> 00:10:51,530 af alle de argumenter og derefter kroppen af ​​funktionen efter det. 209 00:10:51,530 --> 00:10:53,280 Igen disse ting kan synes en smule mærkeligt. 210 00:10:53,280 --> 00:10:57,181 De vil blive anden karakter efter du arbejder med sproget for lidt. 211 00:10:57,181 --> 00:10:58,930 Så vektorer, den måde du konstruere en vektor 212 00:10:58,930 --> 00:11:04,550 er du typen C, som er et nøgleord, så alle de numre, du ønsker eller strenge 213 00:11:04,550 --> 00:11:06,490 eller hvad. 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 matrix bliver fladtrykt. 216 00:11:09,620 --> 00:11:14,385 Så du kan ikke have arrays hvor nogle elementer er enlige tal 217 00:11:14,385 --> 00:11:17,010 og nogle elementer er arrays selv. 218 00:11:17,010 --> 00:11:20,010 >> Så hvis du forsøger at konstruere en matrix var det første element er 4 219 00:11:20,010 --> 00:11:22,370 og det andet element er array 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 af blandet type. 222 00:11:27,760 --> 00:11:32,290 Hvis du forsøger at læse eller skrive uden for rammerne af en vektor 223 00:11:32,290 --> 00:11:36,640 du får denne værdi kaldes NA et som står for en manglende værdi. 224 00:11:36,640 --> 00:11:39,900 Og det er beregnet til ligesom statistikere, der 225 00:11:39,900 --> 00:11:43,080 arbejder med ufuldstændige datasæt. 226 00:11:43,080 --> 00:11:46,460 >> Hvis du anvender en funktion, der er meningen at tage bare ét nummer til et array 227 00:11:46,460 --> 00:11:49,220 så hvad du får, er, at funktion vil kortlægge over array. 228 00:11:49,220 --> 00:11:52,130 Så hvis din funktion lad os sige tager et nummer og returnerer det firkantede. 229 00:11:52,130 --> 00:11:58,170 Du anvender det til array 2,3,5 Hvad du får, er den vifte 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> Og det er meget nyttigt fordi det betyder, at du 231 00:12:00,010 --> 00:12:03,374 behøver ikke at skrive for sløjfer til gør meget simple ting som at anvende 232 00:12:03,374 --> 00:12:05,040 en funktion til alle medlemmer af et datasæt. 233 00:12:05,040 --> 00:12:08,557 Som, hvis du arbejder med store datasæt, du skal gøre en masse. 234 00:12:08,557 --> 00:12:10,390 Binære funktioner er anvendt post ved indrejse. 235 00:12:10,390 --> 00:12:12,430 Jeg vil komme ind i denne. 236 00:12:12,430 --> 00:12:16,750 Du kan få adgang til dem med arrays eller vektorer med firkantede parenteser. 237 00:12:16,750 --> 00:12:22,300 Så vektor navn kantede parenteser 1 vil give dig det første element. 238 00:12:22,300 --> 00:12:25,510 Vector navn firkantede parenteser 2 vil give dig det andet element. 239 00:12:25,510 --> 00:12:27,530 >> Du kan videregive en vektor af indekser og du vil 240 00:12:27,530 --> 00:12:29,640 komme tilbage ud dybest set en sub faktor. 241 00:12:29,640 --> 00:12:34,990 Så du kan gøre vektor navn parentes C, 2,4 og du får ud af en vektor, der indeholder 242 00:12:34,990 --> 00:12:38,804 den anden og fjerde elementer af matrixen. 243 00:12:38,804 --> 00:12:40,720 Og hvis du vil have bare en hurtig oversigt statistik 244 00:12:40,720 --> 00:12:47,529 af en vektor som interkvartilt interval, median, maksimum, uanset hvad, 245 00:12:47,529 --> 00:12:49,820 du kan bare skrive resumé vektor navn og få det ud. 246 00:12:49,820 --> 00:12:52,680 Det er ikke rigtig nyttig i programmering, men hvis du spiller 247 00:12:52,680 --> 00:12:55,990 omkring datasæt, det er praktisk. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- dybest set højere dimensionelle arrays. 249 00:12:58,650 --> 00:13:01,190 De har denne særlige notation syntaks. 250 00:13:01,190 --> 00:13:07,620 Matrix med en matrix, der får fyldt in-- undskyld, matrix med data, 251 00:13:07,620 --> 00:13:09,780 antal rækker, antal kolonner. 252 00:13:09,780 --> 00:13:13,180 Når du har nogle data, det udfylder array generelt vil gå fra top til bund 253 00:13:13,180 --> 00:13:13,380 først. 254 00:13:13,380 --> 00:13:14,190 Derefter venstre til højre. 255 00:13:14,190 --> 00:13:15,030 Så sådan. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 Og R har indbygget matrix multiplikationer, 258 00:13:19,600 --> 00:13:24,310 spektral dekomponering, diagonalisering, en masse ting. 259 00:13:24,310 --> 00:13:27,785 Hvis du vil have højere dimensionelle arrays, så 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 eller hvad dimensioner, du kan gøre det. 261 00:13:29,410 --> 00:13:34,400 Syntaksen er vifte dim lig c, derefter en liste over de dimensioner. 262 00:13:34,400 --> 00:13:38,620 Så hvis du ønsker en 4 dimensionelle array med dimensioner 4, 7, 8, 9, array, 263 00:13:38,620 --> 00:13:45,470 dim lig c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> Du får adgang enkeltværdier med beslag første post komma anden post. 265 00:13:51,180 --> 00:13:54,870 Kan du få hele skiver af rækker eller kolonner. 266 00:13:54,870 --> 00:13:59,900 Med denne ufuldstændige syntaks er det bare rækkenummer komma eller komma kolonne 267 00:13:59,900 --> 00:14:00,400 antal. 268 00:14:00,400 --> 00:14:02,874 269 00:14:02,874 --> 00:14:04,540 Så lister er en slags associeret array. 270 00:14:04,540 --> 00:14:06,360 De har deres egen syntaks her. 271 00:14:06,360 --> 00:14:08,320 Igen ikke febrilsk kopiere alt dette ned. 272 00:14:08,320 --> 00:14:11,370 Dette er blot så folk går gennem dias senere 273 00:14:11,370 --> 00:14:13,089 har alt dette i en flot reference. 274 00:14:13,089 --> 00:14:16,130 Og det vil blive meget naturlig, når Jeg faktisk gå gennem demoer. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Så præsenterer en grundlæggende forbundet arrays. 277 00:14:20,920 --> 00:14:27,040 Du kan få adgang værdier med listenavn, dollartegn, nøgle. 278 00:14:27,040 --> 00:14:31,370 Så hvis din liste er opkaldt foo, så kan du få adgang til det på den måde. 279 00:14:31,370 --> 00:14:37,032 Du kan få en hel nøgle-værdi par ved at passere på pladsen beslag indekset. 280 00:14:37,032 --> 00:14:39,240 Hvis du læser fra en ikke-eksisterende nøgle, får du null. 281 00:14:39,240 --> 00:14:41,150 Det vil ikke fejl. 282 00:14:41,150 --> 00:14:43,590 Ting er, R vil gøre, som meget med null som det kan. 283 00:14:43,590 --> 00:14:46,580 Og det kan betyde, at hvis du er ikke forventer at komme null ud 284 00:14:46,580 --> 00:14:51,840 af nogle liste læse, får du nogle uforudsigelige fejl længere nede 285 00:14:51,840 --> 00:14:52,620 linjen. 286 00:14:52,620 --> 00:14:54,890 >> Dette skete for mig min sommer job, når jeg var ved hjælp R 287 00:14:54,890 --> 00:14:58,410 hvor jeg skiftede, hvordan en bestemt Listen blev defineret på ét sted 288 00:14:58,410 --> 00:15:05,410 men ikke ændre senere på kode, som læste værdier fra den. 289 00:15:05,410 --> 00:15:10,190 Og så hvad der skete, var jeg var læsning null-værdier ud af denne liste, 290 00:15:10,190 --> 00:15:13,090 passerer dem i funktioner, og bliver meget forvirret 291 00:15:13,090 --> 00:15:16,000 da jeg fik alle mulige tilfældige uendeligheder dukker op 292 00:15:16,000 --> 00:15:16,790 i denne funktion. 293 00:15:16,790 --> 00:15:20,730 For hvis du anvender vist maksimum eller minimum funktioner til null, 294 00:15:20,730 --> 00:15:22,570 du får uendelige værdier ud. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Datarammer, de er en underklasse af listen. 297 00:15:29,180 --> 00:15:31,170 Hver værdi er en vektor af samme længde. 298 00:15:31,170 --> 00:15:34,220 Og de er vant til at præsentere, dybest set, datatabeller. 299 00:15:34,220 --> 00:15:36,175 Der er denne initialisering syntaks. 300 00:15:36,175 --> 00:15:38,800 Alt dette vil igen, være meget klarere, når du kommer til demoen. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 Og gode ved datarammer er, at man 303 00:15:44,240 --> 00:15:49,380 kan give navne til alle kolonner og navne på alle rækkerne. 304 00:15:49,380 --> 00:15:53,890 Og så gør adgang dem lidt venligere. 305 00:15:53,890 --> 00:15:59,130 Også dette er, hvordan de fleste funktioner, læst i data fra Excel-regneark 306 00:15:59,130 --> 00:16:03,820 eller fra tekstfiler, for eksempel, vil læse i deres data. 307 00:16:03,820 --> 00:16:07,555 De vil sætte det ind en slags dataramme. 308 00:16:07,555 --> 00:16:09,680 Så functions-- funktionerne syntaks er en smule underligt. 309 00:16:09,680 --> 00:16:16,160 Igen er det navnet på den funktion, tildele, dette søgeord funktion og derefter 310 00:16:16,160 --> 00:16:17,900 listen over argumenter. 311 00:16:17,900 --> 00:16:24,080 Så der er nogle pæne ting om, hvordan funktioner fungerer her. 312 00:16:24,080 --> 00:16:28,170 For én, kan du faktisk tildele standardværdier til visse argumenter. 313 00:16:28,170 --> 00:16:32,910 Så du kan sige R1 equals-- du kan sige foo 314 00:16:32,910 --> 00:16:38,290 er en funktion, hvor R1 er lig med noget som standard, hvis brugeren angiver 315 00:16:38,290 --> 00:16:39,090 ingen argumenter. 316 00:16:39,090 --> 00:16:41,932 Ellers er det hvad han lagt i. 317 00:16:41,932 --> 00:16:44,140 Og det er meget praktisk fordi en masse af vores funktioner 318 00:16:44,140 --> 00:16:47,910 har ofte snesevis eller hundredvis af argumenter. 319 00:16:47,910 --> 00:16:51,210 For eksempel dem til plotte grafer eller plotte scatter plots 320 00:16:51,210 --> 00:16:54,430 har argumenter, der styrer alt fra titlen og aksen 321 00:16:54,430 --> 00:16:59,512 etiketter til farven på regressionslinier. 322 00:16:59,512 --> 00:17:01,470 Og så hvis du ikke ønsker at få folk til at angive 323 00:17:01,470 --> 00:17:04,050 hver enkelt af disse hundredvis af argumenter 324 00:17:04,050 --> 00:17:07,674 kontrollerende hvert eneste aspekt af et plot eller en regression eller hvad, 325 00:17:07,674 --> 00:17:09,299 det er rart at have disse standardværdier. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> Og så kan du faktisk skrive, som du så tilbage her. 328 00:17:19,146 --> 00:17:22,869 Eller finde en bedre eksempel. 329 00:17:22,869 --> 00:17:28,690 Når du ringer til funktioner, du kan faktisk ringe til dem ved hjælp af argument navne. 330 00:17:28,690 --> 00:17:33,919 Så her er et eksempel på matrix constructor. 331 00:17:33,919 --> 00:17:34,960 Det tager tre argumenter. 332 00:17:34,960 --> 00:17:36,760 Normalt du har data, som er en vektor. 333 00:17:36,760 --> 00:17:38,920 Du har N række, som er antallet af rækker. 334 00:17:38,920 --> 00:17:41,160 Du har N cols-- antal kolonner. 335 00:17:41,160 --> 00:17:43,920 De ting er, hvis du skriver N rækken lig hvad 336 00:17:43,920 --> 00:17:46,520 og N er lig col uanset når du ringer denne funktion, 337 00:17:46,520 --> 00:17:47,770 du kan faktisk vende dem. 338 00:17:47,770 --> 00:17:51,590 Så du kan sætte N col først og N rækken sekund, og det vil gøre nogen forskel. 339 00:17:51,590 --> 00:17:54,660 Så det er en fin lille funktion. 340 00:17:54,660 --> 00:17:56,260 >> Gjorde import og eksport. 341 00:17:56,260 --> 00:18:00,010 Dette kan gøres, dybest set. 342 00:18:00,010 --> 00:18:03,816 Der er også faciliteter til at skrive ud vilkårlige R indsigelse mod en binær fil 343 00:18:03,816 --> 00:18:05,190 og derefter læse dem tilbage i senere. 344 00:18:05,190 --> 00:18:08,030 Hvilket er praktisk, hvis du laver en stor interaktiv session R 345 00:18:08,030 --> 00:18:12,850 og du skal gemme tingene meget hurtigt. 346 00:18:12,850 --> 00:18:16,460 Som standard R har en arbejdsgruppe mappe at filer bliver skrevet ud i 347 00:18:16,460 --> 00:18:19,410 og læse igen fra. 348 00:18:19,410 --> 00:18:22,350 Du kan se, at med getwg, ændre det med setdw. 349 00:18:22,350 --> 00:18:25,630 Intet særligt interessant her 350 00:18:25,630 --> 00:18:28,270 >> Så nu de faktiske statistikker stuff-- multilineær regression. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Så den sædvanlige syntaks er en smule kompliceret. 353 00:18:34,910 --> 00:18:37,260 Modellen er en stor genstand dybest set. 354 00:18:37,260 --> 00:18:39,910 Det får tildelt til lm, som er et funktionskald. 355 00:18:39,910 --> 00:18:43,840 Det første element, y tilde x1 plus hvad. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 Mit syntaks her er en smule forvirrende. 358 00:18:47,990 --> 00:18:49,490 Jeg er helt ked af det, det er den standard måde 359 00:18:49,490 --> 00:18:50,990 at datalogiske bøger gøre dette. 360 00:18:50,990 --> 00:18:54,890 Men det er lidt underligt. 361 00:18:54,890 --> 00:18:58,200 >> Så dybest set, det er lm parentes, første element 362 00:18:58,200 --> 00:19:06,730 er variable-- undskyld, afhængig variabel tilde x1 plus x2 plus 363 00:19:06,730 --> 00:19:10,910 men mange uafhængige variabler, du har. 364 00:19:10,910 --> 00:19:14,240 Og så disse kan enten være vektorer, alle af samme længde. 365 00:19:14,240 --> 00:19:16,220 Eller de kan være kolonnen overskrifter i en data frame 366 00:19:16,220 --> 00:19:18,553 at du bare angive i andet argument dataramme. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> Du kan også angive en mere kompleks formel 369 00:19:26,380 --> 00:19:31,990 så du ikke behøver at lineært relatere en en afhængig variabel, 370 00:19:31,990 --> 00:19:34,440 eller én vektor på en allerede eksisterende vektor. 371 00:19:34,440 --> 00:19:38,070 Du kan gøre, for eksempel en vektorkomposant y kvadreret plus 1 372 00:19:38,070 --> 00:19:42,100 og relatere det mod log af en anden vektor. 373 00:19:42,100 --> 00:19:45,200 Du kan udskrive oversigter over den model med denne kommando kaldes 374 00:19:45,200 --> 00:19:48,607 summary-- bare resumé Parens model. 375 00:19:48,607 --> 00:19:50,190 Igen noget andet, jeg bør afklare. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Noget andet, der vil blive korrigeret når slæderne gå op på internettet. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Hvis du blot ønsker at beregne en simpel korrelation 380 00:20:03,210 --> 00:20:09,170 du kan bruge korrelation vektor 1 vektor 2 funktionen kerne. 381 00:20:09,170 --> 00:20:11,856 Metode er som standard Pearson korrelationer. 382 00:20:11,856 --> 00:20:13,480 Det er de standard dem, du kan gøre. 383 00:20:13,480 --> 00:20:15,990 Der er også Spearman og Kendell korrelationer 384 00:20:15,990 --> 00:20:19,530 der er nogle forskellige rangorden korrelation. 385 00:20:19,530 --> 00:20:23,600 Godt de ikke beregne produkt øjeblikke mellem vektorerne selv, 386 00:20:23,600 --> 00:20:28,511 men af ​​vektor rang ordrer. 387 00:20:28,511 --> 00:20:29,510 Jeg vil forklare det senere. 388 00:20:29,510 --> 00:20:30,120 >> PUBLIKUM: Hurtigt spørgsmål 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Selvfølgelig. 390 00:20:30,360 --> 00:20:33,151 >> PUBLIKUM: Så når du beregne for de simple korrelationer gøre 391 00:20:33,151 --> 00:20:37,655 du antage, at der er en statistisk betydning for sammenhængen? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Du behøver ikke at. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 En LM er dybest set bare en maskine. 395 00:20:43,960 --> 00:20:47,690 Det vil tage to ting og det vil spytte ud 396 00:20:47,690 --> 00:20:49,770 koefficienter for den bedste pasform linje. 397 00:20:49,770 --> 00:20:52,310 Det rapporterer også standard fejl på disse koefficienter. 398 00:20:52,310 --> 00:20:55,865 Og det vil fortælle dig, ligesom den skæringspunkt statistisk signifikant 399 00:20:55,865 --> 00:20:56,740 eller en forskel fra 0. 400 00:20:56,740 --> 00:20:59,400 Er hældningen for den bedst fit linjen statistisk 401 00:20:59,400 --> 00:21:01,510 forskellig fra nul, et cetera. 402 00:21:01,510 --> 00:21:06,260 Så det forudsætter noget, tror jeg er bedste svar på dit spørgsmål. 403 00:21:06,260 --> 00:21:07,410 OKAY. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- så den vigtigste årsag bør du bruge R, ligesom multilineær regression. 405 00:21:14,650 --> 00:21:17,320 Dybest set alle sprog har nogle anlæg for det. 406 00:21:17,320 --> 00:21:21,365 Og ærligt R'er syntaks for regression er en smule mystisk. 407 00:21:21,365 --> 00:21:22,990 Men plotte er hvor det virkelig skinner. 408 00:21:22,990 --> 00:21:28,090 >> Den arbejdshest funktionen er plot og det tager to vektorer, x og y. 409 00:21:28,090 --> 00:21:33,010 Og derefter ellipser står for en meget stort antal valgfrie argumenter, 410 00:21:33,010 --> 00:21:39,190 styre alt fra titler til farver af forskellige linjer eller forskellige punkter, 411 00:21:39,190 --> 00:21:40,200 til den type plot. 412 00:21:40,200 --> 00:21:42,250 Du kan have scatter parceller eller line plots. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [Uhørligt] 2 vektorer af samme længde. 415 00:21:49,710 --> 00:21:53,780 Du kan gå forud for dette med vedhæfte data ramme i dit script. 416 00:21:53,780 --> 00:22:01,220 Og dette vil lade dig bare bruge kolonne overskrifter i stedet for separate vektorer. 417 00:22:01,220 --> 00:22:05,410 Du kan tilføje bedst tilpassede linjer og lokale regression kurver for din graf. 418 00:22:05,410 --> 00:22:09,390 >> Disse kommandoer opført her, ab linje og linjer, 419 00:22:09,390 --> 00:22:11,640 som standard disse bliver skrevet ind pop up-vinduer 420 00:22:11,640 --> 00:22:15,560 fordi det forudsætter, at du bruger R interaktivt. 421 00:22:15,560 --> 00:22:17,310 Hvis du ikke er, du kan skrive to filer, 422 00:22:17,310 --> 00:22:21,600 er i virkeligheden helst format du ønsker. 423 00:22:21,600 --> 00:22:25,410 Undskyld, jeg har en tastefejl Jeg har lige indset. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Hvis du vil åbne anden grafiske indretning 426 00:22:32,720 --> 00:22:39,200 du kan bruge denne funktion kaldet PNG eller JPEG eller en masse andre billedformater. 427 00:22:39,200 --> 00:22:42,319 Og du kan skrive grafer til hvad filnavn, du angiver. 428 00:22:42,319 --> 00:22:45,110 Hvis du vil annullere, at du skal use-- Jeg skrev ikke dette i slide-- 429 00:22:45,110 --> 00:22:49,650 men der er en funktion kaldet dev prik det tager ingen argumenter. 430 00:22:49,650 --> 00:22:51,517 >> Så der er faciliteter til 3D plotte 431 00:22:51,517 --> 00:22:53,350 og for konturen plotte Hvis du ønsker at gøre 432 00:22:53,350 --> 00:22:55,700 grafer af to uafhængige variable. 433 00:22:55,700 --> 00:22:57,150 Jeg vil ikke komme ind disse lige nu. 434 00:22:57,150 --> 00:22:59,130 >> Der er også nogle faciliteter til animation 435 00:22:59,130 --> 00:23:01,300 de er normalt vedligeholdes af tredjemand. 436 00:23:01,300 --> 00:23:06,330 Jeg har gjort animationer med R grafer, men jeg har ikke brugt disse tredjeparts 437 00:23:06,330 --> 00:23:06,940 biblioteker. 438 00:23:06,940 --> 00:23:09,929 Så jeg kan ikke rigtig bevidne til hvor gode de er. 439 00:23:09,929 --> 00:23:12,220 Hvad jeg anbefale, hvis du ønsker at gøre animationer med R 440 00:23:12,220 --> 00:23:16,480 er du kan skrive ud af alle rammerne for animationerne 441 00:23:16,480 --> 00:23:18,470 og så kan du bruge en tredjeparts program-- 442 00:23:18,470 --> 00:23:23,630 typiske dem kaldes FFmpeg eller ImageMagick-- at sy 443 00:23:23,630 --> 00:23:26,540 alle dine frames i én animation. 444 00:23:26,540 --> 00:23:28,380 >> Så tid til demo. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Så hvis du bruger en Unix lignende system som er Linux BSD men som bruger BSD. 447 00:23:37,189 --> 00:23:39,730 OS X åbner et terminal vindue og Type R ved kommandoprompten. 448 00:23:39,730 --> 00:23:42,820 Hvis du har R studie eller lignende, der også fungerer. 449 00:23:42,820 --> 00:23:46,270 For Windows-brugere bør du være stand til at finde R i menuen Start. 450 00:23:46,270 --> 00:23:50,390 Det bør hedde noget ligesom R x64 3 punkt uanset hvad. 451 00:23:50,390 --> 00:23:53,110 Åbn det deroppe. 452 00:23:53,110 --> 00:23:58,850 >> Så lad mig nu bare åbne et terminalvindue. 453 00:23:58,850 --> 00:24:02,562 Okay, søgning. 454 00:24:02,562 --> 00:24:03,520 PUBLIKUM: Kommando-Space 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Kommando-Space, tak. 456 00:24:06,675 --> 00:24:10,030 Jeg har ikke normalt bruger Macs. 457 00:24:10,030 --> 00:24:13,310 Terminal, viser nyt vindue. 458 00:24:13,310 --> 00:24:18,120 Nyt vindue er indstillinger grundlæggende, R. Så bør du få 459 00:24:18,120 --> 00:24:22,230 en velkomst besked, noget som dette. 460 00:24:22,230 --> 00:24:31,060 >> Så jeg bruger 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 Dybest set scripts køre på nøjagtig samme måde som 463 00:24:34,510 --> 00:24:40,250 hvis du sad ved computeren skrive i hver linje ad gangen. 464 00:24:40,250 --> 00:24:42,660 Så lad os starte med at lave 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, helt sikkert. 468 00:24:50,050 --> 00:24:51,630 Jeg kan gøre skriftstørrelsen større. 469 00:24:51,630 --> 00:24:53,030 >> PUBLIKUM: Kommando-Plus 470 00:24:53,030 --> 00:24:53,650 >> CONNER HARRIS: Kommando-Plus. 471 00:24:53,650 --> 00:24:54,191 Kommando-Plus. 472 00:24:54,191 --> 00:24:57,610 473 00:24:57,610 --> 00:25:00,370 Okay, hvordan er det? 474 00:25:00,370 --> 00:25:00,870 God? 475 00:25:00,870 --> 00:25:01,551 OKAY. 476 00:25:01,551 --> 00:25:03,300 Så lad os starte med at om en vektor listen. 477 00:25:03,300 --> 00:25:08,710 Må 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 Må ikke bekymre dig om beslaget der. 480 00:25:12,680 --> 00:25:18,590 Beslagene er så hvis du udskrive meget lange arrays, vi kan, hvor du er. 481 00:25:18,590 --> 00:25:26,987 Et eksempel ville være, hvis jeg vil bare interval 2-200. 482 00:25:26,987 --> 00:25:28,820 Hvis jeg udskrevet en meget lange array, konsollerne 483 00:25:28,820 --> 00:25:31,060 er bare så jeg kan holde styr på, hvilke indeks 484 00:25:31,060 --> 00:25:33,250 vi er på, hvis jeg søger gennem denne visuelt. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Så alligevel har vi en. 487 00:25:38,280 --> 00:25:43,326 >> Så jeg sagde før, at arrays interagerer meget pænt med for eksempel 488 00:25:43,326 --> 00:25:44,450 unære operationer som denne. 489 00:25:44,450 --> 00:25:46,500 Så hvad du tror, ​​jeg vil få, hvis jeg skriver et plus 1? 490 00:25:46,500 --> 00:25:49,630 491 00:25:49,630 --> 00:25:51,140 Yep. 492 00:25:51,140 --> 00:25:54,250 Lige nu vil jeg gøre denne anderledes array. 493 00:25:54,250 --> 00:26:01,650 Lad os sige b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Så hvad tror du denne kommando vil gøre? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Tilføj elementerne. 497 00:26:10,670 --> 00:26:14,950 Og så dybest set det er, hvad det gør. 498 00:26:14,950 --> 00:26:16,740 Så dette er temmelig praktisk. 499 00:26:16,740 --> 00:26:23,800 Så jeg hvordan om jeg gør dette. c er, lad os sige, 6 gange 1 til 10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Så hvad gør jeg ønsker at se indeholdt, tror du? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Så alle multipla af seks. 504 00:26:38,110 --> 00:26:42,170 Nu, hvad tror du vil ske, hvis jeg gør det? 505 00:26:42,170 --> 00:26:48,090 Jeg vil gøre det en smule klarere, C, C. 506 00:26:48,090 --> 00:26:50,365 Så hvad sker der, gør du tror, ​​hvis jeg gør det? 507 00:26:50,365 --> 00:26:51,488 et plus c. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [Uhørligt] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> PUBLIKUM: Enten en fejl eller det øger blot de første tre elementer. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Ikke helt. 513 00:27:04,510 --> 00:27:05,522 Dette er, hvad vi fik. 514 00:27:05,522 --> 00:27:08,910 Hvad sker der er en kortere array, a, fik cykluser. 515 00:27:08,910 --> 00:27:13,990 Så fik vi 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Ja. 517 00:27:15,710 --> 00:27:18,940 Og dybest set, kan du se denne adfærd før, et plus 1, 518 00:27:18,940 --> 00:27:22,190 som en underklasse af denne adfærd, hvor den korteste array er blot antallet 519 00:27:22,190 --> 00:27:25,410 1, som er et ét element array. 520 00:27:25,410 --> 00:27:27,740 Jeg bare være at sige vektor alle tiden i stedet for array, 521 00:27:27,740 --> 00:27:30,290 fordi det er hvad r dokumentation normalt gør. 522 00:27:30,290 --> 00:27:33,070 Det er en indgroet c vane. 523 00:27:33,070 --> 00:27:37,590 >> OK, og så nu har vi dette array. 524 00:27:37,590 --> 00:27:38,830 Så vi har dette array, c. 525 00:27:38,830 --> 00:27:41,380 Vi kan få resumé statistikker om C, resumé C. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 Og det er rart. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Så lad os nu gøre nogle matrix ting. 530 00:27:52,670 --> 00:27:56,160 Lad os sige, m er en matrix. 531 00:27:56,160 --> 00:27:57,780 Lad os gøre det til en tre med tre en. 532 00:27:57,780 --> 00:28:01,630 Så nrows lig med 3, og ncols lig med 3. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 Og for data lad os do-- så hvad tror du, det kommer til at gøre? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> Ret, det er den næste. 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å hvad jeg har gjort, er jeg har erklæret en tre med tre matrix 540 00:28:24,580 --> 00:28:26,950 og jeg har bestået i en ni-element array. 541 00:28:26,950 --> 00:28:30,530 Så logaritmen af ​​alle elementer én gennem ni. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 Og alle disse værdier fylde op array-- undskyld? 544 00:28:37,285 --> 00:28:38,660 PUBLIKUM: Det er basen 10 logfiler? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: Nej, log er 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 ønsker bunden 10 log, jeg tror du ville have 548 00:28:47,010 --> 00:28:51,620 at logge uanset, divideret med log 10. 549 00:28:51,620 --> 00:28:56,750 Og så data i [højttalersystemet] lige fylder arrayet, så top til bund, 550 00:28:56,750 --> 00:28:59,490 derefter fra venstre mod højre. 551 00:28:59,490 --> 00:29:06,890 Og hvis du ønskede at gøre nogle andre array, lad os sige n matrix. 552 00:29:06,890 --> 00:29:10,317 Lad os gøre, ved jeg ikke, 2 til 13. 553 00:29:10,317 --> 00:29:11,900 Eller jeg vil gøre noget mere interessant. 554 00:29:11,900 --> 00:29:13,770 Jeg vil gøre 2 til 4. 555 00:29:13,770 --> 00:29:15,780 nrow lig, lad os sige, 3. 556 00:29:15,780 --> 00:29:18,992 Ncol lig 4. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Så vi har fået dette. 559 00:29:22,090 --> 00:29:26,130 >> Og nu, hvis vi ønsker at formere disse, vi ville gøre n procent gange procent, 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 Af de måde, har du se, hvordan da jeg erklærede n, de 2 til 4 565 00:29:37,810 --> 00:29:43,570 vektor fik cyklet indtil det fyldes op alle n? 566 00:29:43,570 --> 00:29:45,710 Hvis du ønskede at tage egenværdi nedbrydning, 567 00:29:45,710 --> 00:29:46,960 det er noget, vi kan gøre meget nemt. 568 00:29:46,960 --> 00:29:47,709 Vi kan gø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 vores første møde med en liste. 571 00:29:54,600 --> 00:29:57,000 >> Så eigen n er en liste med to nøgler. 572 00:29:57,000 --> 00:29:58,430 Værdier, hvilket er dette array her. 573 00:29:58,430 --> 00:30:01,030 Og vektorer, som er dette array her. 574 00:30:01,030 --> 00:30:08,240 Så hvis du ønsker at udtrække, sige, at dette tredje kolonne 575 00:30:08,240 --> 00:30:13,080 fra egenvektorer matrix, fordi egenvektorerne søjlevektorer. 576 00:30:13,080 --> 00:30:24,400 Så vi kan gøre VEC eigen n dollartegn vektorer, komma 3, i [uhørligt]. 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 man kunne forvente. 580 00:30:34,100 --> 00:30:39,210 >> Så siger n gange procent gange vec. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Så resultatet her helt sikkert ligner hvis vi tog den tredje egenværdi her, 583 00:30:48,320 --> 00:30:50,390 som svarer til den tredje egenvektor. 584 00:30:50,390 --> 00:30:53,190 Det bare ganget alt i dette egenvektor, komponent-kloge, 585 00:30:53,190 --> 00:30:53,990 af egenværdi. 586 00:30:53,990 --> 00:30:57,760 Og det er, hvad vi ville forvente, fordi det er hvad egenværdier er. 587 00:30:57,760 --> 00:31:00,890 Har nogen her ikke taget 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å din hjerne fra for lidt. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 Og faktisk hvis vi tager eigen n dollartegn værdier 3 gange 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 formateret forskelligt som en række vektor i stedet for en søjle vektor, 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å dem er dybest set den flot ting, som vi kan gøre med matricer, 597 00:31:35,170 --> 00:31:36,489 demonstreret lister. 598 00:31:36,489 --> 00:31:39,030 Jeg skal vise den pæne ting om funktioner samt. 599 00:31:39,030 --> 00:31:41,750 >> Så lad os say-- [uhørligt] funktion, lad os kalde 600 00:31:41,750 --> 00:31:51,960 det funk mod funktion n n squared-- faktisk, det er egentlig ikke den bedste. 601 00:31:51,960 --> 00:31:55,632 a, b, en kvadreret plus b. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Så én ting om funktioner, igen, er de 604 00:32:00,380 --> 00:32:01,963 behøver ikke eksplicitte return udsagn. 605 00:32:01,963 --> 00:32:04,250 Så du kan bare-- den evalueret sidste udtalelse 606 00:32:04,250 --> 00:32:07,502 bliver meddelelsen tilbage, eller værdien returneres. 607 00:32:07,502 --> 00:32:10,460 Så i dette tilfælde, er vi kun at evaluere én sætning, en kvadratisk plus b. 608 00:32:10,460 --> 00:32:12,043 Det vil være standard returværdien. 609 00:32:12,043 --> 00:32:14,530 Det skader aldrig at sætte i returnere værdier eksplicit, 610 00:32:14,530 --> 00:32:16,880 især hvis du har at gøre med en funktion af meget kompliceret logik 611 00:32:16,880 --> 00:32:17,380 flyde. 612 00:32:17,380 --> 00:32:18,450 Men du behøver ikke dem. 613 00:32:18,450 --> 00:32:24,890 Så nu kan vi gøre funk 5, 1, og dette er dybest set, hvad du ville forvente. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Noget andet, vi kan gøre, Vi kan faktisk gøre funk b 616 00:32:31,270 --> 00:32:33,260 er lig med 1, a er lig 5. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Så hvis vi angiver hvilket nummer her, som argument går til hvilke argumenter 619 00:32:40,770 --> 00:32:44,680 i funktion, kan vi vende rundt disse værdier overalt, hvor vi ønsker. 620 00:32:44,680 --> 00:32:48,405 >> PUBLIKUM: Er der en grund at skrive det ud med b 621 00:32:48,405 --> 00:32:52,404 lig i modsætning til blot at bruge numre og kommaet? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Ja, som regel gøre dette, hvis du har funktioner 623 00:32:54,820 --> 00:32:58,540 med en masse argumenter. 624 00:32:58,540 --> 00:33:00,690 Det kunne ofte være ligesom flag, som du ville kun 625 00:33:00,690 --> 00:33:03,130 vil bruge i sjældne tilfælde. 626 00:33:03,130 --> 00:33:06,740 Og denne måde kan du only-- dig kan henvise til de specifikke argumenter 627 00:33:06,740 --> 00:33:09,110 at du ønsker at bruge ikke-standardværdier for, 628 00:33:09,110 --> 00:33:14,470 og du behøver ikke at skrive en flok af flag lig falsk efter dem. 629 00:33:14,470 --> 00:33:19,710 Eller jeg kan skrive dette igen med en standard værdi som b er lig med 2. 630 00:33:19,710 --> 00:33:26,289 Og så kunne jeg gøre f funk, Jeg vil gøre 4, 1 denne gang. 631 00:33:26,289 --> 00:33:28,580 Og 17, hvilket er 4 kvadreret plus 1, som man kunne forvente. 632 00:33:28,580 --> 00:33:34,290 >> Men jeg kunne også bare kalde dette med funk 4, 633 00:33:34,290 --> 00:33:36,970 og jeg får 18, fordi Jeg kan ikke angive b. 634 00:33:36,970 --> 00:33:38,550 Så b får standardværdien på 2. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, så nu, hvis du er efter sammen med demoen, 637 00:33:47,200 --> 00:33:51,010 skrive denne linje på din kommando Spørg og se, hvad der kommer op. 638 00:33:51,010 --> 00:33:52,090 Faktisk gør det ikke. 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å noget som dette. 642 00:34:01,000 --> 00:34:04,780 Så mtcars er en indbygget data indstillet for denne demonstration 643 00:34:04,780 --> 00:34:13,550 formål, der kommer med-- der kommer i som standard med din r distribution. 644 00:34:13,550 --> 00:34:19,211 Dette er en samling af statistikker fra en 1974 udgave af motordrevne tendens magasin 645 00:34:19,211 --> 00:34:20,710 på en række forskellige bilmodeller. 646 00:34:20,710 --> 00:34:28,270 >> Så der er miles per gallon, cylinders-- Jeg glemmer, hvad disp is-- hestekræfter. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Sandsynligvis. 649 00:34:32,420 --> 00:34:36,920 Hvis du bare Google MT biler, derefter en af ​​de første resultater 650 00:34:36,920 --> 00:34:38,730 vil være fra officielle r dokumentation 651 00:34:38,730 --> 00:34:41,080 og det vil forklare alle disse datafelter. 652 00:34:41,080 --> 00:34:47,020 Så vægten is-- wt er bilens vægt i ton. 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å nu kan vi gøre nogle sjove ting om MT biler er et datafelt. 656 00:34:55,850 --> 00:35:01,640 >> Så vi kan gøre ting ligesom row navne, mt biler. 657 00:35:01,640 --> 00:35:05,490 Og dette er en liste over alle rækkerne i datasættet, der er navne på biler. 658 00:35:05,490 --> 00:35:10,780 Vi kan gøre colnames, mt biler dette. 659 00:35:10,780 --> 00:35:15,500 Hvis du gør mt biler, sub-numeriske indeks, ligesom 2. 660 00:35:15,500 --> 00:35:18,177 vi får den anden kolonne ud af dette, hvilket ville være cylindre. 661 00:35:18,177 --> 00:35:19,370 >> PUBLIKUM: Hvad gjorde du? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: jeg har skrevet mt biler, beslag e, 663 00:35:21,570 --> 00:35:24,180 som gav mig den anden kolonne ud af 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 række, kan jeg skrive mtcars komma 2, f.eks. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Andet runde 2 komma, sådan. 668 00:35:46,390 --> 00:35:48,880 Og der går i din række. 669 00:35:48,880 --> 00:35:54,680 Det her bare giver dig 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 har lige indset nu har jeg glemte at påvise 672 00:36:06,425 --> 00:36:09,150 nogle seje ting om vektorer at du kan gøre med indeks. 673 00:36:09,150 --> 00:36:10,480 Så lad mig gøre det lige nu. 674 00:36:10,480 --> 00:36:17,130 Så lad os gøre c gets-- sætte dette på pause-- 2 gange 1 til 10. 675 00:36:17,130 --> 00:36:21,360 Så C er bare at være vektoren 2 til 20. 676 00:36:21,360 --> 00:36:24,640 Jeg kan tage elementer som dette, c2. 677 00:36:24,640 --> 00:36:30,942 Jeg kan passere i en vektor som dette, så lad C-- mig 678 00:36:30,942 --> 00:36:34,470 bruge andet navn end c, ligesom VEC c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 Dybest set, jeg gør dette, så du ikke får 681 00:36:39,340 --> 00:36:45,010 forvirret mellem C som en vektorkonstruktionen funktion, 682 00:36:45,010 --> 00:36:48,800 og derefter c som en variabel navn. 683 00:36:48,800 --> 00:36:53,120 Vec beslag c 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Dette får mig ud den fjerde, femte, og syv elementer i arrayet. 685 00:36:56,540 --> 00:37:01,740 Jeg kan gøre VEC, sat i en negativ indeks, ligesom negativ 4. 686 00:37:01,740 --> 00:37:06,500 Det vil få mig ud af dette med det fjerde element fjernes. 687 00:37:06,500 --> 00:37:10,140 Så hvis jeg ønskede at gøre skiver, Jeg kan gøre vec 2 til 6. 688 00:37:10,140 --> 00:37:15,480 2 kolon 6 er bare en anden vektor, som er 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Spytter det. 690 00:37:18,230 --> 00:37:20,770 >> Så alligevel, tilbage til mt biler. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Så lad os gøre nogle regressioner. 693 00:37:28,450 --> 00:37:34,240 Lad os sige, model gets-- lad os lineært regress-- ved jeg ikke. 694 00:37:34,240 --> 00:37:41,780 Først lad os gøre vedhæfte mtcars, selvfølgelig. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Så [uhørligt] model lm, lad os relatere miles per gallon på tilde vægt. 697 00:38:00,010 --> 00:38:03,300 Og så dataramme er mtcars. 698 00:38:03,300 --> 00:38:06,830 Så sammenfattende model. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, så det ser lidt kompliceret. 701 00:38:15,595 --> 00:38:19,380 Men dybest set, at se, som om vi forsøge at udtrykke miles per gallon 702 00:38:19,380 --> 00:38:23,970 som en lineær funktion af vægt, så fik vi denne linje her, 703 00:38:23,970 --> 00:38:28,730 som opfanger 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, der vejer nul. 705 00:38:33,830 --> 00:38:41,210 Og så for hver ekstra ton, du banke omkring fem miles per gallon 706 00:38:41,210 --> 00:38:42,440 ud af det. 707 00:38:42,440 --> 00:38:45,120 Begge disse koefficienter dig kan se, standardafvigelser der. 708 00:38:45,120 --> 00:38:47,870 Og de er meget statistisk signifikant. 709 00:38:47,870 --> 00:38:55,740 >> Så vi kan være meget sikker på at 1 e 10 til den negative 10. 710 00:38:55,740 --> 00:38:59,510 Så 1 gange noget at den negative 10, at hvis du laver en tungere bil, 711 00:38:59,510 --> 00:39:01,440 det vil have 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 nogle andre model. 714 00:39:07,250 --> 00:39:09,230 Ligesom i stedet for regression dette på vægt, 715 00:39:09,230 --> 00:39:12,600 lad os relatere det på log over vægt, fordi måske den effektive vægt 716 00:39:12,600 --> 00:39:15,690 om kilometertal er en eller anden måde ikke er lineær. 717 00:39:15,690 --> 00:39:18,540 >> Dette gav os en r kvadreret på 0,7528. 718 00:39:18,540 --> 00:39:19,610 Så lad os prøve dette. 719 00:39:19,610 --> 00:39:21,485 Denne gang lad os gøre en anden variabel, også. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Så resumé, model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 Okay, så igen, vi fik vores bedste pasform linje her. 724 00:39:31,390 --> 00:39:36,160 Og det time-- dette siger, udgangspunkt, at hver gang du 725 00:39:36,160 --> 00:39:38,090 øge vægten af en bil med en faktor e 726 00:39:38,090 --> 00:39:40,580 du mister så 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 gang vores resterende standard fejl det-- det gør ikke noget, virkelig. 729 00:39:50,326 --> 00:39:53,540 Residualstandardafvigelsen er dybest set bare standardfejlen 730 00:39:53,540 --> 00:39:57,760 at du har tilbage, efter at du tage væk tendensen linje. 731 00:39:57,760 --> 00:40:02,805 Og vores R kvadreret her er 0,81, som er en smule bedre end det 732 00:40:02,805 --> 00:40:07,640 vi havde før, 0,52. 733 00:40:07,640 --> 00:40:09,750 >> Og så lad os nu tilføje en Udtrykket denne regression. 734 00:40:09,750 --> 00:40:13,020 Så lad os relatere miles per gallon både på log over vægtene 735 00:40:13,020 --> 00:40:21,130 og, lad os gøre, Q miles, kvart mil tid. 736 00:40:21,130 --> 00:40:26,190 OK, skal det have til-- okay, 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-- undskyld, hvad? 740 00:40:35,000 --> 00:40:37,000 Lad mig kalde det noget andet udover model2. 741 00:40:37,000 --> 00:40:38,000 Lad mig kalde dette model3. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 Og så nu kan vi gøre resumé model3. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 Og så igen, det er dybest set hvad man kunne forvente. 746 00:40:49,100 --> 00:40:51,750 Du har positiv opsnappe. 747 00:40:51,750 --> 00:40:54,550 Den effektive stigende vægt er negativ. 748 00:40:54,550 --> 00:40:58,490 Og den effektive stigende kvart mile tid 749 00:40:58,490 --> 00:41:02,420 er positive, men selv mindre end vægten. 750 00:41:02,420 --> 00:41:06,010 Nu intuitivt, kan du få mening ud af dette ved at sige at tænke over sportsvogne. 751 00:41:06,010 --> 00:41:08,950 Der er en meget hurtig acceleration, en meget kort kvart mil gange. 752 00:41:08,950 --> 00:41:13,729 De er også kommer til at bruge mere gas, mens mere fornuftige biler går 753 00:41:13,729 --> 00:41:16,020 at have langsommere acceleration, højere kvartal mile gange, 754 00:41:16,020 --> 00:41:20,890 og bruger mindre gas ,, så højere miles per gallon. 755 00:41:20,890 --> 00:41:21,390 Alle tiders. 756 00:41:21,390 --> 00:41:23,431 Og så nu er det tid til plot noget som dette. 757 00:41:23,431 --> 00:41:27,810 Så lad os do-- så nøgne knogler, vi kan gøre plots-- 758 00:41:27,810 --> 00:41:35,280 fordi jeg har vedhæftet denne dataramme before-- vi kan bare gøre plots, vægt mpg. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Gør dette til en lidt større. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Der, vi dybest set har en scatter plot, men de punkter 763 00:41:57,350 --> 00:41:58,690 er lidt svært at se på dette. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Jeg husker ikke overfladiskhed hvad syntaks er til at ændre plottet. 766 00:42:10,900 --> 00:42:14,100 Så jeg tror det vil være et godt tidspunkt at opdrage, 767 00:42:14,100 --> 00:42:18,000 der er en meget flot indbygget hjælp funktion, hjælp citater fungerer navn. 768 00:42:18,000 --> 00:42:21,690 Vi vil opdrage dybest set noget, du gerne vil. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Jeg tror, ​​jeg vil faktisk gøre dette typen er lig p for point plots. 771 00:42:32,730 --> 00:42:34,369 Vidste at ændre noget? 772 00:42:34,369 --> 00:42:35,160 Og nej, ikke rigtig. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Okay. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> Af en eller anden grund, da jeg gjorde det på min egen computer et stykke tid siden, 777 00:42:49,580 --> 00:42:52,080 alle scatter punkter var meget klarere. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 Under alle omstændigheder, er scatter slags synlige? 780 00:43:13,970 --> 00:43:15,124 Der er en der. 781 00:43:15,124 --> 00:43:16,165 Et par der, et par der. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 Du kan slags se dem, ikke? 784 00:43:21,185 --> 00:43:24,310 Så hvis vi ønsker at tilføje en bedste pasform linje til dette plot her, som er lidt nøgne 785 00:43:24,310 --> 00:43:29,290 bones-- lad mig gøre det lidt pænere. 786 00:43:29,290 --> 00:43:38,075 Main lig versus vægt. 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 Igen, kan du se, hvor nyttig valgfrie argumenter er her med også 790 00:43:53,570 --> 00:43:58,090 ikke at skulle sætte tingene i et bestemt rækkefølge med tastatur argumenter 791 00:43:58,090 --> 00:44:01,600 når du har parceller, fordi disse tage en masse argumenter. 792 00:44:01,600 --> 00:44:07,490 >> XLAB lig vægt, vægt, tons. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Okay. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, ja, denne enhed er at være lidt irriterende. 797 00:44:21,480 --> 00:44:30,160 Men du kan se slags deroppe, der er en graf titel på siden. 798 00:44:30,160 --> 00:44:35,260 Herovre there's-- på bunden her er akseetiketterne. 799 00:44:35,260 --> 00:44:37,700 Jeg kan ikke huske stående fod hvad kommandoerne ars-- 800 00:44:37,700 --> 00:44:41,000 hvad funktioner er at øge størrelsen af ​​disse etiketter 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 at tilføje bedst tilpassede linje, 803 00:44:46,625 --> 00:44:49,250 vi kunne gøre noget like-- jeg har syntaksen skrevet op her. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Så husk vi blot tilføje model var mpg, vægt, mtcars. 806 00:45:11,130 --> 00:45:16,470 Og så hvis jeg ønskede at tilføje en bedste pasform linje, jeg kunne gøre a, b linje model. 807 00:45:16,470 --> 00:45:18,556 Og boom, vi har en bedste pasform linje. 808 00:45:18,556 --> 00:45:19,970 Det er lidt svært at se igen. 809 00:45:19,970 --> 00:45:22,178 Jeg er helt ked af det teknologiske vanskeligheder. 810 00:45:22,178 --> 00:45:25,230 Men det kører stort set øverste venstre hjørne til nederste højre. 811 00:45:25,230 --> 00:45:27,550 >> Og hvis vægten var større, var det tydeligt, 812 00:45:27,550 --> 00:45:31,260 at opsnappe er, hvad du kan finde fra de summariske statistikker 813 00:45:31,260 --> 00:45:34,790 hvis du skriver sammenfattende model. 814 00:45:34,790 --> 00:45:40,130 OK, så jeg håber, at alle får noget af en fornemmelse af, hvad 815 00:45:40,130 --> 00:45:42,030 R er, hvad det er godt for. 816 00:45:42,030 --> 00:45:45,520 Du kunne gøre langt pænere parceller end dette på din egen tid, hvis du vil. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Så det fremmede funktion interface. 819 00:45:53,950 --> 00:46:00,330 Det er noget, der ikke typisk dækket i indledende foredrag 820 00:46:00,330 --> 00:46:03,560 eller indledende noget for r. 821 00:46:03,560 --> 00:46:05,584 Det er ikke sandsynligt, du får brug for det. 822 00:46:05,584 --> 00:46:08,000 Men jeg fandt det nyttigt i mine egne projekter i fortiden. 823 00:46:08,000 --> 00:46:10,984 Og der er ingen god tutorial til det online. 824 00:46:10,984 --> 00:46:12,900 Så jeg vil blot skynder jer alle gennem denne 825 00:46:12,900 --> 00:46:16,606 og så er du fri til at forlade. 826 00:46:16,606 --> 00:46:18,480 Og så den udenlandske Funktionen interface er hvad 827 00:46:18,480 --> 00:46:23,130 du kan bruge til at ringe ud for at se funktioner med et R. Internt 828 00:46:23,130 --> 00:46:29,850 R er bygget på C. R'er aritmetiske er bare C s 64-bit floating point aritmetik, 829 00:46:29,850 --> 00:46:32,852 der er type dobbelt [uhørligt]. 830 00:46:32,852 --> 00:46:35,060 Og du måske ønsker at gøre dette for en flok grunde. 831 00:46:35,060 --> 00:46:39,250 For én, er R fortolkes, er det ikke kompileret ned til maskinkode. 832 00:46:39,250 --> 00:46:42,170 Så du kan omskrive din indre sløjfer i C og derefter få 833 00:46:42,170 --> 00:46:45,920 Fordelen ved at benytte R. lide det er en smule mere praktisk end C. 834 00:46:45,920 --> 00:46:48,899 Det har bedre graftegning faciliteter og whatnot. 835 00:46:48,899 --> 00:46:51,690 Og mens den stadig er i stand til at få tophastighed ud af de indre sløjfer, 836 00:46:51,690 --> 00:46:53,650 der er, hvor du virkelig har brug for det. 837 00:46:53,650 --> 00:46:56,330 >> Genbrug af eksisterende C-biblioteker, det er også vigtigt. 838 00:46:56,330 --> 00:47:00,320 Hvis du har nogle C bibliotek for lignende, Jeg ved ikke, Fourier transformationer, 839 00:47:00,320 --> 00:47:05,190 eller nogle meget Archean statistik, der er anvendt 840 00:47:05,190 --> 00:47:09,470 i høj energi astrofysik eller noget, ved jeg ikke. 841 00:47:09,470 --> 00:47:13,058 Høj energi astrofysik er ikke engang en tror, ​​tror jeg. 842 00:47:13,058 --> 00:47:16,480 Men du kan gøre det i stedet for at at skrive en indfødt R havn af dem. 843 00:47:16,480 --> 00:47:22,725 Og på til-- og igen, ligesom hvis du ser i de fleste af R standardindstillinger biblioteker, 844 00:47:22,725 --> 00:47:25,600 på interne, den interne er kommer til at bruge den udenlandske funktion 845 00:47:25,600 --> 00:47:26,724 grænseflade meget udførligt. 846 00:47:26,724 --> 00:47:31,630 De vil have ting som Fourier transformerer eller computing korrelation 847 00:47:31,630 --> 00:47:34,890 koefficienter skrevet i C, og de vil bare have R indpakning omkring dem. 848 00:47:34,890 --> 00:47:38,230 Interfacet er en smule vanskeligt. jeg synes 849 00:47:38,230 --> 00:47:43,750 dens problemer er overdrevet i en masse af de instruktioner, du finder. 850 00:47:43,750 --> 00:47:46,200 Men ikke desto mindre, det er lidt forvirrende. 851 00:47:46,200 --> 00:47:48,650 Og jeg har ikke været i stand til finde en god tutorial for det, 852 00:47:48,650 --> 00:47:51,980 så dette er det lige nu. 853 00:47:51,980 --> 00:47:55,360 Igen, dette hele segment er mere til senere brug. 854 00:47:55,360 --> 00:47:57,687 Må ikke bekymre dig om kopiering alt ned lige nu. 855 00:47:57,687 --> 00:48:00,020 Så følgende instruktioner er for Unix-lignende systemer, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Jeg kender ikke hvordan det virker på Windows, 857 00:48:05,150 --> 00:48:08,280 men du bare ikke gør dit afgangsprojekt på Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Du virkelig ikke ønsker at. 860 00:48:12,460 --> 00:48:14,770 Unix er meget bedre sæt op til afslappet programmering. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Så dybest set fremmed funktion interface. 863 00:48:21,390 --> 00:48:24,420 Hvis du ønsker at skrive en C funktion til brug sammen med R, 864 00:48:24,420 --> 00:48:27,250 det har at tage alle de argumenter som pejlemærker. 865 00:48:27,250 --> 00:48:30,666 >> Så for enkeltværdier Dette betyder, at det påpeget værdien. 866 00:48:30,666 --> 00:48:33,040 For arrays, dette er en pegepind til det første element, som 867 00:48:33,040 --> 00:48:36,750 er, hvad array-navne egentlig betyder. 868 00:48:36,750 --> 00:48:40,140 Igen, det er noget du skal have temmelig totalt ned efter p sæt fem. 869 00:48:40,140 --> 00:48:43,334 Array navne er blot pointere til det første element, 870 00:48:43,334 --> 00:48:44,750 Det floating-point type er dobbelt. 871 00:48:44,750 --> 00:48:47,310 Og din funktion har til at returnere ugyldige. 872 00:48:47,310 --> 00:48:50,810 Den eneste måde, at det kan faktisk fortælle R, hvad der skete 873 00:48:50,810 --> 00:48:54,410 er ved at ændre den hukommelse, at R gav til det gennem udenlandske funktion 874 00:48:54,410 --> 00:48:54,910 grænseflade. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Så jeg har skrevet dette eksempel her, er 877 00:49:00,127 --> 00:49:02,460 en funktion, der beregner anvendelse prikproduktet af to vektorer. 878 00:49:02,460 --> 00:49:05,060 Det tager to argumenter, vec1, vec2, som er vektorerne selv, 879 00:49:05,060 --> 00:49:06,934 og derefter n, som er en længde, fordi igen, 880 00:49:06,934 --> 00:49:12,630 R har indbygget [uhørligt] for at finde ud af længden af ​​vektorer, men C ikke. 881 00:49:12,630 --> 00:49:16,182 I C, vektorer er en vilkårlig afgrænset luns af hukommelse. 882 00:49:16,182 --> 00:49:17,890 Så den måde, du kan beregne skalarprodukter 883 00:49:17,890 --> 00:49:23,470 bare sætte dette ud parameter til nul, og derefter gentage gennem 884 00:49:23,470 --> 00:49:28,760 fra 1. til stjerne n, fordi n er en pointer til længden, 885 00:49:28,760 --> 00:49:32,929 blot tilføje noget til det ud parameter. 886 00:49:32,929 --> 00:49:34,970 Og det kan være god praksis hvis du vil gøre 887 00:49:34,970 --> 00:49:37,270 dette at skrive to separate C-funktioner. 888 00:49:37,270 --> 00:49:41,970 En af dem has-- En af dem bare tager de argumenter og de typer 889 00:49:41,970 --> 00:49:43,970 at de normalt ville være i C. 890 00:49:43,970 --> 00:49:47,780 >> Så det tager en række argumenter som pejlemærker. 891 00:49:47,780 --> 00:49:57,090 Men single-værdi argumenter som n, det tager bare som værdier ved kopiering, 892 00:49:57,090 --> 00:49:57,917 uden pointere. 893 00:49:57,917 --> 00:49:59,750 Og så er det ikke gør [Uhørligt] ud pointer. 894 00:49:59,750 --> 00:50:01,290 Og så kan du få en anden, dybest set, 895 00:50:01,290 --> 00:50:03,623 wrapper funktion, stort set håndterer kravene 896 00:50:03,623 --> 00:50:07,740 af den udenlandske funktion grænseflade for dig. 897 00:50:07,740 --> 00:50:11,840 >> Den måde du kalder dette i R er, når du har din funktion 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 hvad din fil hedder, 900 00:50:20,110 --> 00:50:23,020 og OS shell ikke i R-terminalen. 901 00:50:23,020 --> 00:50:25,200 Og det vil skabe en bibliotek kaldet foo dot så. 902 00:50:25,200 --> 00:50:28,180 Og så kan du indlæse den i vores script eller interaktivt 903 00:50:28,180 --> 00:50:32,310 med kommandoen dyn dot belastning. 904 00:50:32,310 --> 00:50:35,720 Så er der en funktion i F kaldes dot c. 905 00:50:35,720 --> 00:50:39,310 >> Dette tager argumenter, der er først navnet på funktionen i C 906 00:50:39,310 --> 00:50:40,970 at du vil ringe til. 907 00:50:40,970 --> 00:50:43,920 Og så alle de parametre til denne funktion, 908 00:50:43,920 --> 00:50:45,420 de skal være i den rigtige rækkefølge. 909 00:50:45,420 --> 00:50:48,580 Du er nødt til at bruge denne type tvang fungerer som heltal, som 910 00:50:48,580 --> 00:50:52,050 dobbelt, som karakter, og som logisk. 911 00:50:52,050 --> 00:50:54,710 Og så når det vender tilbage den listen, som igen er lige 912 00:50:54,710 --> 00:50:57,550 en tilknyttet række af parameter navne og de værdier 913 00:50:57,550 --> 00:51:00,950 efter at funktionen er kørt. 914 00:51:00,950 --> 00:51:08,520 >> Så i dette tilfælde, fordi dot prod har argumenter vec1, vec2, og int n, n ud. 915 00:51:08,520 --> 00:51:11,980 Til prik c vi har dot prod, navnet på funktionen 916 00:51:11,980 --> 00:51:16,250 vi kalder, vec1, vec2, type tvinge. 917 00:51:16,250 --> 00:51:20,060 Længden af ​​enten vektor, Jeg valgte vec1 vilkårligt. 918 00:51:20,060 --> 00:51:25,479 Det ville være mere robust at sige s heltal min længde vec1, længde vec2. 919 00:51:25,479 --> 00:51:27,520 Så lige så dobbelt nul, fordi vi ikke rigtig 920 00:51:27,520 --> 00:51:29,644 ligeglad med, hvad går ind i ud parameter, fordi vi er 921 00:51:29,644 --> 00:51:32,270 sætte den til nul alligevel. 922 00:51:32,270 --> 00:51:37,560 >> Og så resultaterne vil være en store associeret array af grundlæggende 923 00:51:37,560 --> 00:51:42,090 vec1 er uanset hvad, vec2 er hvad. 924 00:51:42,090 --> 00:51:44,330 Men vi er interesseret i ud, så vi kan få det ud. 925 00:51:44,330 --> 00:51:47,780 Dette er igen, en meget eksempel legetøj af en udenlandsk funktion interface. 926 00:51:47,780 --> 00:51:54,160 Men hvis du har til at beregne dot produkter af massive vektorer i loops, 927 00:51:54,160 --> 00:51:56,960 eller hvis du skal gøre noget andet i en løkke, 928 00:51:56,960 --> 00:51:59,850 og du ikke ønsker at stole på R, som ikke har lidt af overliggende 929 00:51:59,850 --> 00:52:02,830 bygget ind i det, kan det være nyttigt. 930 00:52:02,830 --> 00:52:05,870 >> Igen, det er ikke normalt en indledende emne til R. 931 00:52:05,870 --> 00:52:08,571 Det er ikke meget veldokumenteret. 932 00:52:08,571 --> 00:52:11,070 Jeg er bare inklusive det, fordi Jeg har fundet det nyttigt i fortiden. 933 00:52:11,070 --> 00:52:13,654 Så dårlig praksis. 934 00:52:13,654 --> 00:52:15,820 Jeg nævnte, at der er en for-løkke i funktion. 935 00:52:15,820 --> 00:52:21,150 Generelt bør du ikke, i sproget, ikke bruge det. 936 00:52:21,150 --> 00:52:26,100 Baseret på, hvordan R implementerer iteration internt, kan det være langsom. 937 00:52:26,100 --> 00:52:28,540 De bare ser også grimt. 938 00:52:28,540 --> 00:52:32,410 >> R håndterer vektorer meget pænt, så oftentimes behøver du ikke at bruge det. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Så kan du normalt erstatte en vektor ofte 941 00:52:38,900 --> 00:52:42,490 med disse funktioner kaldes høj ordens funktioner, kort, Reducer, 942 00:52:42,490 --> 00:52:44,404 Find, eller Filter. 943 00:52:44,404 --> 00:52:46,320 Jeg vil bare give nogle eksempler på, hvad disse gør. 944 00:52:46,320 --> 00:52:49,957 Kort er en højere orden funktion, fordi det tager en funktion som et argument. 945 00:52:49,957 --> 00:52:52,290 Så du kan give det en funktion, kan du give det et array, 946 00:52:52,290 --> 00:52:54,640 og det vil anvende funktionen til hvert element i arrayet 947 00:52:54,640 --> 00:52:55,681 og returnere den nye array. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Reducer, dybest set du give det et array, du giver det 950 00:53:00,160 --> 00:53:02,930 en funktion, der tager to argumenter. 951 00:53:02,930 --> 00:53:07,100 Den vil anvende funktionen først, første argument med en vis forret værdi. 952 00:53:07,100 --> 00:53:09,440 Derefter til dette resultat i den anden. 953 00:53:09,440 --> 00:53:12,590 Derefter til dette resultat i den tredje, derefter til dette resultat i fjerde. 954 00:53:12,590 --> 00:53:14,870 Og derefter vende tilbage når det bliver til enden. 955 00:53:14,870 --> 00:53:17,620 Så for eksempel, hvis du ønsker at beregne summen af ​​alle de elementer 956 00:53:17,620 --> 00:53:23,240 i et array, end man kunne kalde reducere med [uhørligt] reducere en tilføjelse 957 00:53:23,240 --> 00:53:26,620 funktion, ligesom funk a, b, returnere et plus b. 958 00:53:26,620 --> 00:53:28,960 Og start derefter en værdi på 0. 959 00:53:28,960 --> 00:53:32,950 >> Og alle disse, kan du finde dem beskrevet i F-dokumentationen, 960 00:53:32,950 --> 00:53:35,720 i enhver lærebog om funktionel programmering. 961 00:53:35,720 --> 00:53:38,330 Der er også denne klasse af funktioner godkend funktioner, 962 00:53:38,330 --> 00:53:42,807 som jeg don't-- de er lidt svært at forklare, 963 00:53:42,807 --> 00:53:45,640 men hvis du kigger i [uhørligt] reserveret, jeg citerede i starten, 964 00:53:45,640 --> 00:53:48,615 Han forklarer dem ganske godt i hans tillæg på F programmering. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Mere om praksis, tilføje til vektorer. 967 00:53:53,390 --> 00:53:57,570 968 00:53:57,570 --> 00:53:58,070 Ja? 969 00:53:58,070 --> 00:54:01,651 970 00:54:01,651 --> 00:54:02,900 Jeg tror, ​​jeg skal rette det. 971 00:54:02,900 --> 00:54:07,450 I den første linje, VEC pil, at pilen ikke bør være der. 972 00:54:07,450 --> 00:54:10,920 Du kan tildele til en vektor, igen, ved at tage sin længde plus 1 973 00:54:10,920 --> 00:54:13,220 og tildele en vis værdi for det. 974 00:54:13,220 --> 00:54:18,970 Det vil forlænge vektoren, eller du kan gøre VEC ligemænd c, vec newvalue. 975 00:54:18,970 --> 00:54:21,540 Igen, hvis du bruger C med ét argument som en vektor, 976 00:54:21,540 --> 00:54:23,300 den resulterende hierarki bliver fladtrykt. 977 00:54:23,300 --> 00:54:27,160 Så du bare få en vektor der er udvidet med 1. 978 00:54:27,160 --> 00:54:30,410 Aldrig gøre dette. 979 00:54:30,410 --> 00:54:33,330 >> Grunden til at du ikke bør gøre dette er det. 980 00:54:33,330 --> 00:54:37,430 Når du tildele en vektor, det giver det en vis chunk hukommelse. 981 00:54:37,430 --> 00:54:40,680 Hvis du øger den vektor størrelse, det har at omfordele vektoren 982 00:54:40,680 --> 00:54:43,820 et andet sted. 983 00:54:43,820 --> 00:54:46,980 Og så omfordeling er ret dyrt. 984 00:54:46,980 --> 00:54:50,530 Jeg vil ikke gå i detaljer om, hvordan hukommelse målere gennemføres 985 00:54:50,530 --> 00:54:57,280 af operativsystemet niveau, men det tager en masse tid 986 00:54:57,280 --> 00:54:58,962 at finde en ny bid af hukommelse. 987 00:54:58,962 --> 00:55:00,920 Og også, hvis du er omfordeling af masser og masser 988 00:55:00,920 --> 00:55:03,500 gradvist større bidder, du ender 989 00:55:03,500 --> 00:55:06,420 med noget, der hedder hukommelse fragmentering, 990 00:55:06,420 --> 00:55:09,390 hvor den tilgængelige hukommelse er opdelt i masser af små blokke 991 00:55:09,390 --> 00:55:11,500 i hukommelsen målere synspunkt. 992 00:55:11,500 --> 00:55:15,340 Og det bliver sværere og sværere at finde hukommelse til andre ting. 993 00:55:15,340 --> 00:55:19,455 Så i stedet, hvis du har brug for at gøre dette, hvis du har brug for at vokse en vektor fra den ene ende 994 00:55:19,455 --> 00:55:24,240 til den næste, i stedet for at tilføje til det konstant, skal du på forhånd tildele den. 995 00:55:24,240 --> 00:55:29,310 Vec pil, vektor længde lig 1.000, eller hvad. 996 00:55:29,310 --> 00:55:33,200 >> Og så kan du bare tildele til vektoren værdier én 997 00:55:33,200 --> 00:55:36,000 en tid, efter du har tildelt det én gang. 998 00:55:36,000 --> 00:55:40,140 Jeg løb ind i dette, igen, min sommer job da jeg skrev NRA forskellen 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 Ideen er, at når du har en værdi for din løsning, 1002 00:55:49,290 --> 00:55:51,240 du bruge den til at beregne den næste. 1003 00:55:51,240 --> 00:55:53,700 Så min naturlige naiv hældning var at sige OK, 1004 00:55:53,700 --> 00:55:56,930 så jeg vil starte med en vektor det er en væsentlig værdi. 1005 00:55:56,930 --> 00:56:01,260 Beregn fra, at den næste værdi der går på min løsning vektor, 1006 00:56:01,260 --> 00:56:02,630 og tilføje det. 1007 00:56:02,630 --> 00:56:05,290 >> Opret noget andet, tilføj det. 1008 00:56:05,290 --> 00:56:08,120 Det gik meget, meget langsomt. 1009 00:56:08,120 --> 00:56:11,540 Og når jeg indset dette og jeg har ændret mit system 1010 00:56:11,540 --> 00:56:16,020 fra at tilføje til denne vektor Ligesom 10.000 til 100.000 gange, 1011 00:56:16,020 --> 00:56:18,910 bare pre-tildeling af en vektor og bare kører med. 1012 00:56:18,910 --> 00:56:22,100 Jeg fik mere end 1.000 gange hastighed op. 1013 00:56:22,100 --> 00:56:26,280 Så dette er en meget almindelig fælde for R-programmering. 1014 00:56:26,280 --> 00:56:31,560 Hvis du har brug for at opbygge en vektor stykke for stykke, præ-allokere den. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> Et andet fælles tur up-- dette er min sidste slide, ikke worry-- er fejlhåndtering. 1017 00:56:40,240 --> 00:56:42,890 R, at være ærlig, ikke virkelig gør dette meget godt. 1018 00:56:42,890 --> 00:56:45,010 Der er en masse af problemer, der kan dukke op. 1019 00:56:45,010 --> 00:56:48,360 For eksempel, hvis du får et array eller en vektor ud af en funktion 1020 00:56:48,360 --> 00:56:52,377 at du havde forventet en enkelt værdi kommer fra, eller omvendt, 1021 00:56:52,377 --> 00:56:55,460 og du passerer det ind i en funktion, du skrev forventer en enkelt værdi, 1022 00:56:55,460 --> 00:56:57,270 der kan være et problem. 1023 00:56:57,270 --> 00:57:01,440 >> Visse funktioner returnere null som gør, siger, 1024 00:57:01,440 --> 00:57:05,560 læser fra et ikke-eksisterende nøgle i en liste. 1025 00:57:05,560 --> 00:57:08,527 Men null er ikke som C hvor, hvis du forsøger at læse 1026 00:57:08,527 --> 00:57:11,360 fra en gammel pointer, [uhørligt] til null pointer, det bare seg fejl 1027 00:57:11,360 --> 00:57:14,109 og hvis du er i dit debugger det fortæller dig præcis 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-- funktioner vil gøre uforudsigelige ting 1030 00:57:20,772 --> 00:57:21,730 hvis de er afleveret null. 1031 00:57:21,730 --> 00:57:24,575 Ligesom hvis du er afleveret max null, Det vil give dig negative uendelighed. 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å dette skete til mig en gang, da jeg havde 1036 00:57:32,630 --> 00:57:34,771 ændret en masse felter på min liste struktur 1037 00:57:34,771 --> 00:57:37,520 gang uden at ændre dem andre steder da jeg læste fra dem. 1038 00:57:37,520 --> 00:57:40,670 Og så fik jeg alle mulige tilfældige uendeligt resultater dukker op 1039 00:57:40,670 --> 00:57:43,080 og jeg ingen idé om, hvor de kom fra. 1040 00:57:43,080 --> 00:57:45,310 Og desværre er der ingen reel R streng tilstand 1041 00:57:45,310 --> 00:57:48,940 hvor man kan sige, hvis noget ser ud som det kunne være en fejl, 1042 00:57:48,940 --> 00:57:51,960 bare stoppe der, så jeg kan være disciplineret og løse det. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 Men der er noget kaldet stop, hvis ikke. 1045 00:57:57,240 --> 00:58:00,480 Det svarer til C s hævde, hvis du har talt om det. 1046 00:58:00,480 --> 00:58:02,690 Jeg tror ikke, C hævde er et foredrag emne, 1047 00:58:02,690 --> 00:58:06,370 men din sektionsleder kunne være gået over det. 1048 00:58:06,370 --> 00:58:10,393 Og stoppe hvis ikke dybest set tager nogen prædikat, så eventuelle erklæringer, som 1049 00:58:10,393 --> 00:58:11,824 kan være sande eller falske. 1050 00:58:11,824 --> 00:58:13,490 Og hvis det er falsk, stopper programmet. 1051 00:58:13,490 --> 00:58:18,260 Det fortæller dig præcis, hvad linje du var på og hvilken tilstand mislykkedes. 1052 00:58:18,260 --> 00:58:21,910 >> Og denne meget nyttige, for eksempel, tilregnelighed kontrol, funktion indgange. 1053 00:58:21,910 --> 00:58:25,110 Så hvis du har en funktion og du forventer, siger, 1054 00:58:25,110 --> 00:58:29,640 hvis du skulle give mig en dato, jeg ønsker datoerne være bare en vektor af længde 1 1055 00:58:29,640 --> 00:58:31,735 og et sted mellem 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 kender noget er gået galt. 1058 00:58:36,170 --> 00:58:40,280 Og jeg vælger at stoppe der, før denne har tilfældig banke på effekter med kode 1059 00:58:40,280 --> 00:58:44,190 at det er sværere at spore igennem. 1060 00:58:44,190 --> 00:58:47,170 Så det er en mulig bruge til stop, hvis ikke. 1061 00:58:47,170 --> 00:58:48,660 >> Under alle omstændigheder, OK. 1062 00:58:48,660 --> 00:58:49,690 Så det er slut. 1063 00:58:49,690 --> 00:58:51,290 Tak så meget for at komme. 1064 00:58:51,290 --> 00:58:53,710 Jeg er en rang amatør på dette. 1065 00:58:53,710 --> 00:58:57,270 Så ked af, hvis du keder eller forvirret eller hvad har du. 1066 00:58:57,270 --> 00:59:01,670 Jeg er glad for at tage spørgsmål via e-mail ved connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Det gælder også for alle ser denne live eller senere. 1068 00:59:07,230 --> 00:59:10,190 Også selvom jeg ikke er en TF, er jeg også meget 1069 00:59:10,190 --> 00:59:13,900 villige til at tjene som en uofficiel rådgiver for alle, der er 1070 00:59:13,900 --> 00:59:15,460 hjælp R i et afsluttende projekt. 1071 00:59:15,460 --> 00:59:19,900 >> Hvis du gerne vil det, så bare tale med din TF 1072 00:59:19,900 --> 00:59:23,750 og derefter skrive mig en mail, så Jeg ved, hvad du arbejder på 1073 00:59:23,750 --> 00:59:26,680 og så jeg kan oprette møde gange med dig, hvis du ønsker. 1074 00:59:26,680 --> 00:59:27,990 Så igen, mange tak. 1075 00:59:27,990 --> 00:59:28,960 Jeg håber du nød det. 1076 00:59:28,960 --> 00:59:29,450 >> PUBLIKUM: [uhørligt]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Selvfølgelig. 1078 00:59:30,617 --> 00:59:34,910 >> PUBLIKUM: Hvilken slags af et projekt ville en CS-studerende bruge 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 gør noget, der er rent i data mining, 1081 00:59:40,510 --> 00:59:43,790 for eksempel, og der er masser af ting 1082 00:59:43,790 --> 00:59:46,692 du kunne gøre med det med data minedrift og machine learning. 1083 00:59:46,692 --> 00:59:48,900 Du vil måske bruge R for en bestanddel af noget. 1084 00:59:48,900 --> 00:59:52,022 Jeg opdraget oprindeligt eksemplet af hvis du skriver en hjemmeside 1085 00:59:52,022 --> 00:59:54,730 og du vil køre automatiseret statistisk analyse af din server 1086 00:59:54,730 --> 00:59:57,990 logfiler på et bestemt tidspunkt hver dag, der kan være noget, der er 1087 00:59:57,990 --> 01:00:01,260 meget let at gøre på bare et kort R script, som du kan planlægge 1088 01:00:01,260 --> 01:00:04,200 at køre hver nat, f.eks. 1089 01:00:04,200 --> 01:00:06,550 >> Og jeg er sikker på, hvis der er nogen grund til du ville 1090 01:00:06,550 --> 01:00:11,520 ønsker statistikker eller graffaciliteten og har denne kørsel automatisk i stedet 1091 01:00:11,520 --> 01:00:13,790 for at skulle interagere med ting i Excel, 1092 01:00:13,790 --> 01:00:16,750 for eksempel, det er noget du måske ønsker at bruge R for. 1093 01:00:16,750 --> 01:00:21,190 Så flere spørgsmål, før jeg forlader? 1094 01:00:21,190 --> 01:00:21,690 Ingen? 1095 01:00:21,690 --> 01:00:24,960 Okay, godt, igen, tak tak for at komme. 1096 01:00:24,960 --> 01:00:29,417