1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Still I denk dat een aantal spannende video 3 00:00:07,690 --> 00:00:12,570 geproduceerd door een professionele consultancy dat gebruik maakt van R veel in zijn werk. 4 00:00:12,570 --> 00:00:16,329 >> Verteller: Wat zit er achter de statistieken de analyse en de visualisaties 5 00:00:16,329 --> 00:00:19,770 dat de huidige helderste data wetenschappers en zakelijke leiders vertrouwen op 6 00:00:19,770 --> 00:00:22,012 om krachtige beslissingen te nemen? 7 00:00:22,012 --> 00:00:23,540 U kunt niet altijd zien. 8 00:00:23,540 --> 00:00:24,790 Maar het is er. 9 00:00:24,790 --> 00:00:29,460 Het heet R, open source r-- de statistische programmeertaal 10 00:00:29,460 --> 00:00:32,630 dat data experts de wereld dan gebruiken voor alles 11 00:00:32,630 --> 00:00:35,350 van mapping brede maatschappelijke en marketing trends online 12 00:00:35,350 --> 00:00:39,210 het ontwikkelen van de financiële en klimaat modellen die helpen rijden onze economieën 13 00:00:39,210 --> 00:00:40,780 en gemeenschappen. 14 00:00:40,780 --> 00:00:44,910 >> Maar wat is precies R en waar R beginnen? 15 00:00:44,910 --> 00:00:48,620 Wel aanvankelijk, R gestart hier met twee hoogleraren 16 00:00:48,620 --> 00:00:51,950 die een betere statistische wilde platform voor hun leerlingen. 17 00:00:51,950 --> 00:00:56,030 Zo creëerden ze een gemodelleerd na de statistische taal S. 18 00:00:56,030 --> 00:01:00,480 Zij, samen met vele anderen, bleef werken aan en het gebruik van R, 19 00:01:00,480 --> 00:01:05,489 creëren van instrumenten voor R en vinden nieuwe toepassingen voor R elke dag. 20 00:01:05,489 --> 00:01:07,750 >> Dankzij dit wereldwijde gemeenschap inspanning, 21 00:01:07,750 --> 00:01:11,850 R bleef groeien met duizenden van de gebruiker gemaakte bibliotheken gebouwd 22 00:01:11,850 --> 00:01:15,500 R functionaliteit te verbeteren en crowd-sourced kwaliteit validatie 23 00:01:15,500 --> 00:01:19,740 en de steun van de meest erkende marktleiders op elk gebied dat 24 00:01:19,740 --> 00:01:25,040 gebruikt R. Dat is geweldig, want R is de beste in wat het doet. 25 00:01:25,040 --> 00:01:28,540 Snel ontluikende deskundigen en gemakkelijk te interpreteren, communiceren met, 26 00:01:28,540 --> 00:01:33,790 en snel te visualiseren gegevens waaruit hun groeiende gemeenschap van R gebruikers wereldwijd 27 00:01:33,790 --> 00:01:36,380 en zie hoe open source R blijft in vorm 28 00:01:36,380 --> 00:01:39,340 de toekomst van de statistische analyse en data wetenschap. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, geweldig. 31 00:01:47,710 --> 00:01:50,360 Dus mijn eigen presentatie zal een beetje soberder. 32 00:01:50,360 --> 00:01:54,380 Het zal niet inhouden dat veel opwindende achtergrond muziek. 33 00:01:54,380 --> 00:01:59,160 Maar zoals je zag in de video, R is een soort van een algemene taal doel programma. 34 00:01:59,160 --> 00:02:03,720 Maar het was vooral aangemaakt voor de statistische werkzaamheden. 35 00:02:03,720 --> 00:02:07,980 >> Dus het is ontworpen voor de statistiek, voor gegevensanalyse, voor data mining. 36 00:02:07,980 --> 00:02:12,420 En dus kun je dit zien in een veel het ontwerp keuzes die de makers van R 37 00:02:12,420 --> 00:02:13,320 gemaakt. 38 00:02:13,320 --> 00:02:15,472 Het is ontworpen voor een groot deel, mensen die niet 39 00:02:15,472 --> 00:02:17,930 experts in de programmering, die gewoon oppakken programmering 40 00:02:17,930 --> 00:02:23,460 aan de kant, zodat ze kunnen hun werk doen in de sociale wetenschappen of in de statistieken 41 00:02:23,460 --> 00:02:25,440 of wat dan ook. 42 00:02:25,440 --> 00:02:27,850 >> Het heeft een groot aantal zeer belangrijke verschillen ten opzichte van C. 43 00:02:27,850 --> 00:02:33,200 Maar de syntaxis en de paradigma die het gebruikt zijn in grote lijnen hetzelfde. 44 00:02:33,200 --> 00:02:36,830 En je moet vrij voelen thuis recht uit de vleermuis. 45 00:02:36,830 --> 00:02:38,520 Het is een dwingende taal. 46 00:02:38,520 --> 00:02:40,260 >> Niet te veel zorgen te maken over dat als je niet weet wat de term. 47 00:02:40,260 --> 00:02:42,676 Maar er is een verschil tussen imperatief, declaratieve, 48 00:02:42,676 --> 00:02:43,810 en functioneel. 49 00:02:43,810 --> 00:02:47,600 Dwingend gewoon betekent dat u te maken verklaringen die zijn opdrachten in principe. 50 00:02:47,600 --> 00:02:52,340 En dan is de tolk of de computer volgt ze een voor een. 51 00:02:52,340 --> 00:02:56,630 Het is zwak getypt, zijn er geen soort verklaringen in R. 52 00:02:56,630 --> 00:02:59,130 >> En dan de lijnen verschillende types 53 00:02:59,130 --> 00:03:03,920 zijn een beetje meer los dan ze in C, bijvoorbeeld. 54 00:03:03,920 --> 00:03:06,450 En zoals ik al zei zijn er zeer uitgebreide faciliteiten 55 00:03:06,450 --> 00:03:15,610 voor grafieken, voor statistische analyse voor data mining. 56 00:03:15,610 --> 00:03:19,540 Deze zijn zowel ingebouwd in de taal, de genoemde video, 57 00:03:19,540 --> 00:03:23,680 duizenden van derden bibliotheken die u kunt downloaden en gratis te gebruiken 58 00:03:23,680 --> 00:03:25,340 met zeer losse licentievoorwaarden. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Dus in het algemeen, zou ik adviseren dat je kijkt naar deze twee boeken 61 00:03:31,500 --> 00:03:34,610 als je gaat werken aan R. One van hen is de officiële R beginners 62 00:03:34,610 --> 00:03:35,110 gids. 63 00:03:35,110 --> 00:03:38,660 Het onderhouden door de kern ontwikkelaars van R. 64 00:03:38,660 --> 00:03:42,400 U kunt het opnieuw downloaden, gratis laden en juridisch bij die verwijzen daar. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Al deze dia's gaan om te gaan op het internet, op de CS50 website 67 00:03:49,869 --> 00:03:50,660 Nadat dit is gedaan. 68 00:03:50,660 --> 00:03:53,690 Dus geen noodzaak om te kopiëren dingen naar beneden verwoed. 69 00:03:53,690 --> 00:03:56,800 >> De andere is een leerboek door Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 die is een professor aan de statistieken Carnegie Mellon, de zogenaamde Advanced Data 71 00:04:00,100 --> 00:04:02,160 Analyse van een Elementaire Point of View. 72 00:04:02,160 --> 00:04:04,010 Dit is niet hoofdzakelijk een R boek. 73 00:04:04,010 --> 00:04:07,130 Het is een boek en statistieken Het is een gegevensanalyse boek. 74 00:04:07,130 --> 00:04:11,990 Maar het is zeer toegankelijk voor mensen die hebben een zekere mate van statistische kennis. 75 00:04:11,990 --> 00:04:13,750 >> Ik heb nog nooit een formele cursus genomen. 76 00:04:13,750 --> 00:04:17,269 Ik weet alleen stukjes en beetjes uit diverse aanverwante onderwerpen 77 00:04:17,269 --> 00:04:18,579 dat ik cursussen heb genomen. 78 00:04:18,579 --> 00:04:21,839 En ik was in staat om te begrijpen dat heel goed. 79 00:04:21,839 --> 00:04:25,630 >> Alle cijfers zijn gegeven R. Ze zijn gemaakt in R 80 00:04:25,630 --> 00:04:30,280 en ze hebben ook codevoorbeelden onder elk cijfer dat u vertellen 81 00:04:30,280 --> 00:04:33,270 hoe maak je elk figuur met R-code. 82 00:04:33,270 --> 00:04:37,400 En dat is erg handig als je probeert te emuleren 83 00:04:37,400 --> 00:04:38,650 sommige figuur zie je in een boek. 84 00:04:38,650 --> 00:04:47,840 >> En weer gratis te downloaden stat.cmu.edu/cshalizi/ Sorry, 85 00:04:47,840 --> 00:04:50,230 die moeten worden slash tilde cshalizi. 86 00:04:50,230 --> 00:04:53,150 Ik zal ervoor zorgen om te corrigeren dat wanneer de officiële slides omhoog gaan. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV dat is gewoon de afkorting van de titel van het boek. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Zo algemeen caveats-- R heeft veel mogelijkheden. 90 00:05:02,500 --> 00:05:05,331 Ik ga alleen in staat zijn om te dekken het oppervlak van een heleboel dingen. 91 00:05:05,331 --> 00:05:08,580 Ook het eerste gedeelte van het seminar gaat iets van een data dump zijn. 92 00:05:08,580 --> 00:05:11,437 Ik ben heel erg van dat. 93 00:05:11,437 --> 00:05:13,770 Kortom, ga ik u kennismaken met een heleboel dingen 94 00:05:13,770 --> 00:05:15,350 recht uit de vleermuis, gaan zo snel mogelijk. 95 00:05:15,350 --> 00:05:17,058 En dan krijgen we het leuke gedeelte, dat is 96 00:05:17,058 --> 00:05:20,570 de demo waar ik kan laten zien alles dat we hebben gesproken over op het scherm. 97 00:05:20,570 --> 00:05:23,321 En je kunt rond te spelen op uw eigen. 98 00:05:23,321 --> 00:05:26,070 Dus er gaat een hoop te zijn technische zaken opgeworpen hier. 99 00:05:26,070 --> 00:05:28,060 Maak je geen zorgen over het kopiëren van alles wat naar beneden. 100 00:05:28,060 --> 00:05:31,740 Omdat A, kunt u alle spullen op de CS50 website later. 101 00:05:31,740 --> 00:05:37,780 En B, het is niet echt zo belangrijk deze memoriseren van de objectglaasjes. 102 00:05:37,780 --> 00:05:40,462 Het is belangrijker dat je sommige intuïtieve faciliteit mee 103 00:05:40,462 --> 00:05:44,220 en die afkomstig is van gewoon spelen rond. 104 00:05:44,220 --> 00:05:45,720 >> Dus waarom R gebruiken? 105 00:05:45,720 --> 00:05:49,440 Kortom, als u een project dat impliceert mijnbouw grote datasets, data 106 00:05:49,440 --> 00:05:52,664 visualisatie, je R. moet gebruiken Als u bent 107 00:05:52,664 --> 00:05:55,830 doet ingewikkelde statistische analyses, moeilijk in Excel zou zijn, 108 00:05:55,830 --> 00:05:58,010 bijvoorbeeld, zou Ook worden goed-- 109 00:05:58,010 --> 00:06:00,506 als je aan het doen bent statistische analyse die is geautomatiseerd. 110 00:06:00,506 --> 00:06:02,130 Laten we zeggen dat je onderhouden van een website. 111 00:06:02,130 --> 00:06:06,320 En u wilt de server log te lezen elke dag en stellen een aantal lijst 112 00:06:06,320 --> 00:06:10,320 als de top landen die uw gebruikers vandaan komen, 113 00:06:10,320 --> 00:06:15,100 sommige samenvattende statistieken over hoe lang zij besteden aan uw website of wat dan ook. 114 00:06:15,100 --> 00:06:16,910 En wilt u dit elke dag uit te voeren. 115 00:06:16,910 --> 00:06:20,280 >> Nu, als je dit doet in Excel, je zou moeten gaan naar uw server log, 116 00:06:20,280 --> 00:06:23,490 importeert dat in een Excel-gegevens spreadsheet, 117 00:06:23,490 --> 00:06:24,910 lopen de hele analyse handmatig. 118 00:06:24,910 --> 00:06:27,100 R, kunt u gewoon schrijven een script. 119 00:06:27,100 --> 00:06:29,520 Plan is om elke dag te lopen vanuit het besturingssysteem. 120 00:06:29,520 --> 00:06:33,657 En dan elke avond om 02:00, of wanneer u deze plannen uit te voeren, 121 00:06:33,657 --> 00:06:35,990 het eruit zal zien door je internetverkeer voor die dag. 122 00:06:35,990 --> 00:06:39,010 En dan de volgende dag, zult u hebben dit glanzende, nieuw rapport 123 00:06:39,010 --> 00:06:41,710 of wat met alle informatie gevraagd. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Dus eigenlijk R is voor Cisco programmeren versus Cisco analyse. 126 00:06:50,217 --> 00:06:51,050 Voorafgaande gebeurt. 127 00:06:51,050 --> 00:06:53,104 Laten we in de echte dingen. 128 00:06:53,104 --> 00:06:55,020 Zo zijn er drie echte soorten van de taal. 129 00:06:55,020 --> 00:06:56,120 Er is numeriek type. 130 00:06:56,120 --> 00:07:01,250 Er is een soort van een verschil tussen de integers en zwevende punten 131 00:07:01,250 --> 00:07:02,769 maar niet echt. 132 00:07:02,769 --> 00:07:04,560 Er is een personage typen, die koorden. 133 00:07:04,560 --> 00:07:07,100 En er is een logische typt, dat is Booleans. 134 00:07:07,100 --> 00:07:11,080 >> En u kunt omzetten tussen soorten deze functies als numeriek, 135 00:07:11,080 --> 00:07:15,220 als karakter, als logisch. 136 00:07:15,220 --> 00:07:17,510 Als u belt, bijvoorbeeld, als numeriek op een string, 137 00:07:17,510 --> 00:07:20,030 het zal proberen om die string te lezen als een getal, net 138 00:07:20,030 --> 00:07:25,897 dat A2I en scanf doen, en C. Als je bellen als numeriek op waar of onwaar 139 00:07:25,897 --> 00:07:26,980 het zal converteren naar 1 of 0. 140 00:07:26,980 --> 00:07:29,110 Als u belt als personage op alles wat het zal 141 00:07:29,110 --> 00:07:32,550 zetten dat in een string representatie. 142 00:07:32,550 --> 00:07:34,990 >> En dan zijn er vectoren en matrices. 143 00:07:34,990 --> 00:07:37,580 Dus vectoren zijn in principe 1 dimensionale arrays. 144 00:07:37,580 --> 00:07:40,600 Ze zijn wat we arrays bellen C. Matrices, 2-dimensionale arrays. 145 00:07:40,600 --> 00:07:42,350 En dan hoger dimensionale arrays kunt u 146 00:07:42,350 --> 00:07:48,560 hebben 3, 4, 5 dimensies of wat van de numerieke waarden, strijkers, 147 00:07:48,560 --> 00:07:52,860 logische waarden. 148 00:07:52,860 --> 00:07:55,380 >> Je hebt ook de lijsten die zijn een soort associatieve array. 149 00:07:55,380 --> 00:07:57,390 Ik zal in dat een beetje. 150 00:07:57,390 --> 00:07:59,390 Dus een belangrijk ding dat reizen mensen in R 151 00:07:59,390 --> 00:08:01,470 is dat er geen echte, pure atomaire types. 152 00:08:01,470 --> 00:08:05,870 Er is geen werkelijke onderscheid tussen een getal, als een numerieke waarde, 153 00:08:05,870 --> 00:08:07,920 en een lijst van numerieke waarden. 154 00:08:07,920 --> 00:08:12,370 Numerieke waarden zijn eigenlijk de hetzelfde als de vectoren met lengte 1. 155 00:08:12,370 --> 00:08:14,959 En dit heeft een aantal belangrijke implicaties. 156 00:08:14,959 --> 00:08:17,500 One, betekent dit dat je kunt doen dingen heel gemakkelijk dat te betrekken 157 00:08:17,500 --> 00:08:21,037 zoals het toevoegen van een nummer aan een vector. 158 00:08:21,037 --> 00:08:23,120 R zal in principe figuur wat bedoel je daarmee. 159 00:08:23,120 --> 00:08:24,610 En ik zal dat krijgen in een tweede. 160 00:08:24,610 --> 00:08:27,930 Het betekent ook dat er geen manier het soort checker-- voorzover 161 00:08:27,930 --> 00:08:30,530 dat zoiets bestaat in r-- te vertellen 162 00:08:30,530 --> 00:08:33,780 wanneer je bent geslaagd in enkele waarde wanneer het verwacht een array of vice versa. 163 00:08:33,780 --> 00:08:39,159 En dat kan leiden tot een aantal vreemde problemen die ik tegenkwam toen 164 00:08:39,159 --> 00:08:42,252 Ik was met behulp van R tijdens mijn zomerbaan. 165 00:08:42,252 --> 00:08:43,710 En er zijn geen mixed-type arrays. 166 00:08:43,710 --> 00:08:46,543 Dus je kunt niet hebben een scala waren de eerste elementen is, weet ik niet, 167 00:08:46,543 --> 00:08:49,332 de string "Jan" en de tweede element is nummer 42. 168 00:08:49,332 --> 00:08:52,540 Als u probeert om dat te doen, dan krijg je alles gewoon omgezet in een string. 169 00:08:52,540 --> 00:08:54,760 Dus we hebben touwtje John, touwtje 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Zo ongewoon syntactische features-- meest R syntax is vergelijkbaar met C. 172 00:09:02,025 --> 00:09:04,690 Er zijn enkele belangrijke verschillen. 173 00:09:04,690 --> 00:09:05,620 Typen is zeer zwak. 174 00:09:05,620 --> 00:09:07,360 Er zijn dus geen variabele declaraties. 175 00:09:07,360 --> 00:09:12,670 Opdracht maakt gebruik van de vreemde error operator minder dan koppelteken. 176 00:09:12,670 --> 00:09:15,340 Reacties zijn met het hekje. 177 00:09:15,340 --> 00:09:19,230 Ik denk dat nu dagen noemen we het hashtag maar dat is niet echt accurate-- niet 178 00:09:19,230 --> 00:09:21,810 dubbele slash. 179 00:09:21,810 --> 00:09:24,710 >> Modulaire resten zijn met %% tekenen. 180 00:09:24,710 --> 00:09:30,172 Integer divisie is met% /%, wat zeer moeilijk te lezen wanneer het wordt geprojecteerd 181 00:09:30,172 --> 00:09:30,880 op het scherm. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 U kunt bereiken van krijgen integers met de dikke darm. 184 00:09:37,200 --> 00:09:41,840 Dus 2,5 geeft je een vector te geven alle nummers 2 tot 5. 185 00:09:41,840 --> 00:09:44,530 >> Arrays zijn one-geïndexeerd, die schroeven veel mensen 186 00:09:44,530 --> 00:09:47,540 up als ze uit meer typische programmeertalen, 187 00:09:47,540 --> 00:09:50,450 zoals C, waar de meeste dingen zijn zero-geïndexeerd. 188 00:09:50,450 --> 00:09:54,420 Nogmaals, dit is waar R erfgoed als een taal voor als niet 189 00:09:54,420 --> 00:09:56,560 professionele programmeurs komt. 190 00:09:56,560 --> 00:09:59,680 Als je een socioloog of een econoom of iets 191 00:09:59,680 --> 00:10:01,980 en je probeert te gebruiken R in principe als een aanvulling 192 00:10:01,980 --> 00:10:03,832 uw belangrijker professionele werk, 193 00:10:03,832 --> 00:10:06,040 je gaat vinden one-indexeren van een beetje meer natuurlijk. 194 00:10:06,040 --> 00:10:09,890 Omdat je begint te tellen 1 in het dagelijks leven, niet 0. 195 00:10:09,890 --> 00:10:13,260 >> Voor lussen, is vergelijkbaar de foreach construct in PHP, 196 00:10:13,260 --> 00:10:17,090 die u krijgt leren in-- vrij snel. 197 00:10:17,090 --> 00:10:22,540 Dat is voor de waarde in vector en dan kan je dingen met waarde. 198 00:10:22,540 --> 00:10:24,040 Doelgroep: Dat is komen in collegezaal. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Oh, dat is komen lezing, uitstekend. 200 00:10:26,248 --> 00:10:29,815 Doelgroep: De opdracht is, is het veronderstelde punt van rechts naar links? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: Van rechts naar links, ja. 202 00:10:31,440 --> 00:10:34,720 U kunt denken aan het als de waarde op rechts geschoven in de variabele 203 00:10:34,720 --> 00:10:36,240 aan de linkerkant. 204 00:10:36,240 --> 00:10:36,781 Publiek: OK. 205 00:10:36,781 --> 00:10:39,770 206 00:10:39,770 --> 00:10:42,330 >> CONNOR HARRIS: En tot slot syntaxis van de functie is een beetje vreemd. 207 00:10:42,330 --> 00:10:48,460 U hebt de functie naam foo, toegewezen om dit zoekwoord functie, gevolgd 208 00:10:48,460 --> 00:10:51,530 door alle argumenten en daarna de orgaan van de functie daarna. 209 00:10:51,530 --> 00:10:53,280 Ook deze dingen kan lijkt een beetje vreemd. 210 00:10:53,280 --> 00:10:57,181 Ze zullen een tweede natuur geworden na je werkt met de taal voor een beetje. 211 00:10:57,181 --> 00:10:58,930 Dus vectoren, de weg u de bouw van een vector 212 00:10:58,930 --> 00:11:04,550 is dat je het type C, dat is een sleutelwoord, dan alle nummers die u wilt of strings 213 00:11:04,550 --> 00:11:06,490 of wat dan ook. 214 00:11:06,490 --> 00:11:07,995 Argumenten ook vectoren. 215 00:11:07,995 --> 00:11:09,620 Maar de resulterende matrix wordt afgevlakt. 216 00:11:09,620 --> 00:11:14,385 Dus je kunt niet arrays, waar hebben sommige elementen zijn enkele nummers 217 00:11:14,385 --> 00:11:17,010 en sommige elementen zijn arrays zelf. 218 00:11:17,010 --> 00:11:20,010 >> Dus als u probeert een te construeren serie waren de eerste element is 4 219 00:11:20,010 --> 00:11:22,370 en het tweede element is de matrix 3,5 je 220 00:11:22,370 --> 00:11:25,890 gewoon een drie elementen array, 4,3,5. 221 00:11:25,890 --> 00:11:27,760 Ze kunnen niet van gemengde type. 222 00:11:27,760 --> 00:11:32,290 Als u probeert te lezen of te schrijven buiten de grenzen van een vector 223 00:11:32,290 --> 00:11:36,640 zult u deze waarde genoemd NA een krijgen wat staat voor een ontbrekende waarde. 224 00:11:36,640 --> 00:11:39,900 En dit is bestemd voor zoals statistici die 225 00:11:39,900 --> 00:11:43,080 werken met onvolledige datasets. 226 00:11:43,080 --> 00:11:46,460 >> Als u een functie die wordt verondersteld van toepassing slechts één nummer naar een array 227 00:11:46,460 --> 00:11:49,220 dan wat je krijgt is, de functie in kaart over de array. 228 00:11:49,220 --> 00:11:52,130 Dus als je de functie laten we zeggen neemt een nummer en het rendement dat plein. 229 00:11:52,130 --> 00:11:58,170 U vraagt ​​dat aan de array 2,3,5 Wat je krijgt is de array 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> En dat is erg handig omdat het u betekent 231 00:12:00,010 --> 00:12:03,374 niet hoeft te schrijven voor de loops voor doet het heel simpele dingen zoals het aanbrengen 232 00:12:03,374 --> 00:12:05,040 een functie om alle leden van een dataset. 233 00:12:05,040 --> 00:12:08,557 Die, als je werkt met grote datasets, moet je veel doen. 234 00:12:08,557 --> 00:12:10,390 Binaire functies toegepaste invoer door invoer. 235 00:12:10,390 --> 00:12:12,430 Ik zal krijgen in dat. 236 00:12:12,430 --> 00:12:16,750 U kunt ze openen met arrays of vectoren met vierkante haken. 237 00:12:16,750 --> 00:12:22,300 Dus vector naam vierkante haken 1 zul je het eerste element te geven. 238 00:12:22,300 --> 00:12:25,510 Vector naam vierkante haakjes 2 zult u het tweede element te geven. 239 00:12:25,510 --> 00:12:27,530 >> U kunt doorgeven een vector indices en u zult 240 00:12:27,530 --> 00:12:29,640 terug uit eigenlijk een sub-factor. 241 00:12:29,640 --> 00:12:34,990 Dus je kunt vector naam haakjes C te doen, 2,4 en je krijgt een vector die 242 00:12:34,990 --> 00:12:38,804 de tweede en vierde elementen van de array. 243 00:12:38,804 --> 00:12:40,720 En als je wil gewoon een snelle samenvatting statistiek 244 00:12:40,720 --> 00:12:47,529 van een vector zoals interquartile range, mediaan, maximum, wat dan ook, 245 00:12:47,529 --> 00:12:49,820 je kunt gewoon typen overzicht vector naam en krijgen dat uit. 246 00:12:49,820 --> 00:12:52,680 Dat is niet echt handig in programmeren, maar als je speelt 247 00:12:52,680 --> 00:12:55,990 rond de datasets, is het handig. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- principe hogere dimensionale matrices. 249 00:12:58,650 --> 00:13:01,190 Ze hebben deze speciale notatie syntax. 250 00:13:01,190 --> 00:13:07,620 Matrix met een array die krijgt gevuld in-- sorry, matrix met data, 251 00:13:07,620 --> 00:13:09,780 aantal rijen, aantal kolommen. 252 00:13:09,780 --> 00:13:13,180 Wanneer u een aantal data, het vult in de array principe gaat van boven naar beneden 253 00:13:13,180 --> 00:13:13,380 eerste. 254 00:13:13,380 --> 00:13:14,190 Vervolgens van links naar rechts. 255 00:13:14,190 --> 00:13:15,030 Dus, als dat. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 En R heeft een ingebouwde matrix vermenigvuldigingen, 258 00:13:19,600 --> 00:13:24,310 spectrale ontleding diagonalisatie, een heleboel dingen. 259 00:13:24,310 --> 00:13:27,785 Als u wilt hoger dimensionale arrays, dus 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 of wat afmetingen kun je dat doen. 261 00:13:29,410 --> 00:13:34,400 De syntax is scala dim gelijk aan c, dan is de lijst van de dimensies. 262 00:13:34,400 --> 00:13:38,620 Dus als je wilt een 4-dimensionale array met afmetingen 4, 7, 8, 9, de array, 263 00:13:38,620 --> 00:13:45,470 dim is gelijk aan c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> U krijgt toegang tot enkele waarden met beugels eerste vermelding komma tweede item. 265 00:13:51,180 --> 00:13:54,870 Je kunt hele plakjes krijgen rijen of kolommen. 266 00:13:54,870 --> 00:13:59,900 Met deze incomplete syntax het gewoon rijnummer komma of komma kolom 267 00:13:59,900 --> 00:14:00,400 aantal. 268 00:14:00,400 --> 00:14:02,874 269 00:14:02,874 --> 00:14:04,540 Dus lijsten zijn een soort geassocieerde array. 270 00:14:04,540 --> 00:14:06,360 Ze hebben hun eigen syntaxis hier. 271 00:14:06,360 --> 00:14:08,320 Opnieuw doen niet krampachtig kopieer alle dit omlaag. 272 00:14:08,320 --> 00:14:11,370 Dit is gewoon zo dat de mensen gaan door de slides later 273 00:14:11,370 --> 00:14:13,089 hebben dit alles in een mooie referentie. 274 00:14:13,089 --> 00:14:16,130 En dit zal heel natuurlijk eens geworden Ik heb eigenlijk wandeling door de demo's. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Zo noemt een fundamenteel verbonden arrays. 277 00:14:20,920 --> 00:14:27,040 U kunt waarden benaderen met lijstnaam, dollarteken, toets. 278 00:14:27,040 --> 00:14:31,370 Dus als je de lijst wordt genoemd foo, dan kun je deze openen als dat. 279 00:14:31,370 --> 00:14:37,032 U kunt een hele key-waarde paar krijgen door het passeren op het plein beugel index. 280 00:14:37,032 --> 00:14:39,240 Als je leest van een niet-bestaand key, krijg je nul. 281 00:14:39,240 --> 00:14:41,150 Het zal niet fout. 282 00:14:41,150 --> 00:14:43,590 Ding is, R zal doen als veel met null als het kan. 283 00:14:43,590 --> 00:14:46,580 En dit kan betekenen dat als je niet verwacht nul uit te komen 284 00:14:46,580 --> 00:14:51,840 van enkele lijst te lezen, moet u een aantal te krijgen onvoorspelbare fouten verder omlaag 285 00:14:51,840 --> 00:14:52,620 de lijn. 286 00:14:52,620 --> 00:14:54,890 >> Dit gebeurde voor mij mijn zomerbaan toen ik met R 287 00:14:54,890 --> 00:14:58,410 waar ik veranderd hoe een bepaald lijst is gedefinieerd in één plek 288 00:14:58,410 --> 00:15:05,410 maar niet later veranderen op het code die waarden te lezen uit het. 289 00:15:05,410 --> 00:15:10,190 En dus wat er gebeurd was ik was lezen null-waarden uit deze lijst, 290 00:15:10,190 --> 00:15:13,090 leiden daarvan naar functies en zijn erg in de war 291 00:15:13,090 --> 00:15:16,000 toen ik allerlei willekeurige oneindigheden opduiken 292 00:15:16,000 --> 00:15:16,790 in deze functie. 293 00:15:16,790 --> 00:15:20,730 Want als je bepaalde maximale toepassing of minimale functies op null, 294 00:15:20,730 --> 00:15:22,570 je krijgt oneindige waarden. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Dataframes, ze zijn een subklasse van de lijst. 297 00:15:29,180 --> 00:15:31,170 Elke waarde is een vector van dezelfde lengte. 298 00:15:31,170 --> 00:15:34,220 En ze worden gebruikt voor de presentatie, in principe, tabellen. 299 00:15:34,220 --> 00:15:36,175 Er is dit initialisatie syntax. 300 00:15:36,175 --> 00:15:38,800 Dit alles wederom veel worden duidelijker als je naar de demo. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 En het leuke van gegevensframes is dat je 303 00:15:44,240 --> 00:15:49,380 kunnen namen alle kolommen geven en namen alle rijen. 304 00:15:49,380 --> 00:15:53,890 En dus dat maakt de toegang ze een beetje vriendelijker. 305 00:15:53,890 --> 00:15:59,130 Ook dit is hoe de meeste functies die ingelezen gegevens uit Excel-spreadsheets 306 00:15:59,130 --> 00:16:03,820 of tekstbestanden bijvoorbeeld zal lezen in hun gegevens. 307 00:16:03,820 --> 00:16:07,555 Ze zullen het in te zetten een soort van data frame. 308 00:16:07,555 --> 00:16:09,680 Dus functions-- functies syntax is een beetje raar. 309 00:16:09,680 --> 00:16:16,160 Wederom is de naam van de functie, toewijzen, dit zoekwoord functie en vervolgens 310 00:16:16,160 --> 00:16:17,900 de lijst van argumenten. 311 00:16:17,900 --> 00:16:24,080 Dus er zijn een aantal leuke dingen over hoe functies werken hier. 312 00:16:24,080 --> 00:16:28,170 Voor één, kun je eigenlijk toewijzen standaardwaarden van bepaalde argumenten. 313 00:16:28,170 --> 00:16:32,910 Dus je kunt zeggen R1 equals-- kunt u foo zeggen 314 00:16:32,910 --> 00:16:38,290 een functie waarin R1 gelijk iets standaard als de gebruiker specificeert 315 00:16:38,290 --> 00:16:39,090 geen argumenten. 316 00:16:39,090 --> 00:16:41,932 Anders is het wat hij zette in. 317 00:16:41,932 --> 00:16:44,140 En dit is zeer handig omdat veel van onze functies 318 00:16:44,140 --> 00:16:47,910 hebben vaak tientallen of honderden argumenten. 319 00:16:47,910 --> 00:16:51,210 Bijvoorbeeld degenen voor het plotten grafieken of plotten puntgrafieken 320 00:16:51,210 --> 00:16:54,430 hebben argumenten die controle alles van de titel en de as 321 00:16:54,430 --> 00:16:59,512 labels aan de kleur van regressielijnen. 322 00:16:59,512 --> 00:17:01,470 En dus als je niet wilt om mensen te laten specificeren 323 00:17:01,470 --> 00:17:04,050 elk van deze honderden argumenten 324 00:17:04,050 --> 00:17:07,674 het beheersen van elk aspect van een perceel of een regressie of wat dan ook, 325 00:17:07,674 --> 00:17:09,299 het is leuk om deze standaardwaarden te hebben. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> En dan kun je eigenlijk Schrijf zoals je hier zag terug. 328 00:17:19,146 --> 00:17:22,869 Of zoek een beter voorbeeld. 329 00:17:22,869 --> 00:17:28,690 Wanneer u functies gesprek kunt u eigenlijk noemen ze met het argument namen. 330 00:17:28,690 --> 00:17:33,919 Dus hier is een voorbeeld van de matrix constructeur. 331 00:17:33,919 --> 00:17:34,960 Het duurt drie argumenten. 332 00:17:34,960 --> 00:17:36,760 Meestal moet je data, die een vector. 333 00:17:36,760 --> 00:17:38,920 U N rij, die is het aantal rijen. 334 00:17:38,920 --> 00:17:41,160 U N cols-- aantal kolommen. 335 00:17:41,160 --> 00:17:43,920 Het ding is als u typt N rij is gelijk aan wat 336 00:17:43,920 --> 00:17:46,520 en N col gelijk aan wat toen je oproepen van deze functie, 337 00:17:46,520 --> 00:17:47,770 je eigenlijk kan keren hen. 338 00:17:47,770 --> 00:17:51,590 Dus je kunt N col eerste en N rij gezet tweede en het zal geen verschil maken. 339 00:17:51,590 --> 00:17:54,660 Dus dat is een leuke feature. 340 00:17:54,660 --> 00:17:56,260 >> Deed import en export. 341 00:17:56,260 --> 00:18:00,010 Dit kan, in principe. 342 00:18:00,010 --> 00:18:03,816 Er zijn ook faciliteiten uit te schrijven willekeurige R-objecten naar een binair bestand 343 00:18:03,816 --> 00:18:05,190 en dan lezen ze terug in later. 344 00:18:05,190 --> 00:18:08,030 Dat is handig als je aan het doen bent een grote interactieve sessie R 345 00:18:08,030 --> 00:18:12,850 en wat je nodig hebt om op te slaan dingen heel snel. 346 00:18:12,850 --> 00:18:16,460 Standaard heeft R een werkmap dat bestanden krijgen uitgeschreven in 347 00:18:16,460 --> 00:18:19,410 en lees terug uit. 348 00:18:19,410 --> 00:18:22,350 Je kunt zien dat met getwg, veranderen met setdw. 349 00:18:22,350 --> 00:18:25,630 Niets bijzonder interessant hier 350 00:18:25,630 --> 00:18:28,270 >> Dus nu de werkelijke statistieken stuff-- multilineaire regressie. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Dus de gebruikelijke syntax is een beetje ingewikkeld. 353 00:18:34,910 --> 00:18:37,260 Het model is een groot object in principe. 354 00:18:37,260 --> 00:18:39,910 Het wordt toegewezen lm, die een functieaanroep. 355 00:18:39,910 --> 00:18:43,840 Het eerste element, de y tilde x1 plus wat dan ook. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 Mijn syntax hier is een beetje verwarrend. 358 00:18:47,990 --> 00:18:49,490 Ik ben vrij sorry, dit is de standaard manier 359 00:18:49,490 --> 00:18:50,990 dat informatica boeken doen. 360 00:18:50,990 --> 00:18:54,890 Maar het is een beetje raar. 361 00:18:54,890 --> 00:18:58,200 >> Dus eigenlijk, het is lm haakjes, eerste punt 362 00:18:58,200 --> 00:19:06,730 wordt variable-- sorry, afhankelijk variabele tilde x1 plus x2 plus 363 00:19:06,730 --> 00:19:10,910 hoeveel onafhankelijke variabelen je hebt. 364 00:19:10,910 --> 00:19:14,240 En dan zijn deze kan zowel vectoren, allemaal dezelfde lengte. 365 00:19:14,240 --> 00:19:16,220 Of ze kunnen kolom headers in een dataframe 366 00:19:16,220 --> 00:19:18,553 dat je gewoon opgeeft in het Het tweede argument van data frame. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> U kunt ook opgeven een complexe formule 369 00:19:26,380 --> 00:19:31,990 dus je hoeft niet lineair te terugvallen één afhankelijke variabele, 370 00:19:31,990 --> 00:19:34,440 of een vector op een reeds bestaande vector. 371 00:19:34,440 --> 00:19:38,070 Je kunt doen, bijvoorbeeld een vector component y kwadraat plus 1 372 00:19:38,070 --> 00:19:42,100 en regressie dat tegen log van een andere vector. 373 00:19:42,100 --> 00:19:45,200 U kunt samenvattingen van de afdrukken model met deze opdracht genoemd 374 00:19:45,200 --> 00:19:48,607 summary-- net samenvatting parens model. 375 00:19:48,607 --> 00:19:50,190 Weer iets anders ik zou moeten verduidelijken. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Iets anders dat te zullen gecorrigeerd wanneer de dia's te gaan op het internet. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Als je gewoon wilt berekenen een eenvoudige correlatie 380 00:20:03,210 --> 00:20:09,170 u kunt correlatie vector gebruiken 1 vector 2 functie kern. 381 00:20:09,170 --> 00:20:11,856 Methode is standaard Pearson correlaties. 382 00:20:11,856 --> 00:20:13,480 Dat zijn de standaard die je kunt doen. 383 00:20:13,480 --> 00:20:15,990 Er zijn ook Spearman en Kendell correlaties 384 00:20:15,990 --> 00:20:19,530 Daarin is een aantal rangorde correlatie. 385 00:20:19,530 --> 00:20:23,600 Nou ze niet berekenen product momenten tussen de vectoren zelf, 386 00:20:23,600 --> 00:20:28,511 maar van de vector rang orders. 387 00:20:28,511 --> 00:20:29,510 Ik zal dat later uitleggen. 388 00:20:29,510 --> 00:20:30,120 >> PUBLIEK: Snelle vraag 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Zeker. 390 00:20:30,360 --> 00:20:33,151 >> Publiek: Dus als je de berekening om de eenvoudige correlaties te doen 391 00:20:33,151 --> 00:20:37,655 je ervan uitgaan dat er een statistisch betekenis voor de correlatie? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Je hoeft niet. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 Een lm is eigenlijk gewoon een machine. 395 00:20:43,960 --> 00:20:47,690 Het zal in twee zaken en het zal uitspugen 396 00:20:47,690 --> 00:20:49,770 coëfficiënten voor de beste pasvorm lijn. 397 00:20:49,770 --> 00:20:52,310 Het rapporteert eveneens standaard fouten op die coëfficiënten. 398 00:20:52,310 --> 00:20:55,865 En het zal u vertellen, zoals de intercept statistisch significant 399 00:20:55,865 --> 00:20:56,740 of verschil 0. 400 00:20:56,740 --> 00:20:59,400 Is de helling van de best fit lijn statistisch 401 00:20:59,400 --> 00:21:01,510 nul is, et cetera. 402 00:21:01,510 --> 00:21:06,260 Dus het neemt niets, denk ik is het beste antwoord op uw vraag. 403 00:21:06,260 --> 00:21:07,410 OK. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- dus de belangrijkste reden dat je moet Gebruik R, zoals multilineaire regressie. 405 00:21:14,650 --> 00:21:17,320 In principe elke taal heeft enkele voorziening voor. 406 00:21:17,320 --> 00:21:21,365 En eerlijk gezegd R's syntaxis voor regressie is een beetje geheimzinnig. 407 00:21:21,365 --> 00:21:22,990 Maar plotten is waar het echt schijnt. 408 00:21:22,990 --> 00:21:28,090 >> Het werkpaard functie is plot en het neemt twee vectoren, x en y. 409 00:21:28,090 --> 00:21:33,010 En dan de ellipsen staat voor een groot aantal optionele argumenten 410 00:21:33,010 --> 00:21:39,190 controle alles van titels aan kleuren van verschillende lijnen of diverse punten 411 00:21:39,190 --> 00:21:40,200 de aard van de plot. 412 00:21:40,200 --> 00:21:42,250 U kunt scatter hebt percelen of lijn percelen. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [Onverstaanbaar] 2 vectoren van dezelfde lengte. 415 00:21:49,710 --> 00:21:53,780 U kunt dit voorafgaan met hechten data frame in uw script. 416 00:21:53,780 --> 00:22:01,220 En dit laat je gewoon column gebruiken headers in plaats van afzonderlijke vectoren. 417 00:22:01,220 --> 00:22:05,410 U kunt het best passende lijnen en lokale voegen regressie bochten om uw grafiek. 418 00:22:05,410 --> 00:22:09,390 >> Deze commando's vermeld hier, ab lijn en lijnen, 419 00:22:09,390 --> 00:22:11,640 Standaard deze krijgen geschreven in pop-upvensters 420 00:22:11,640 --> 00:22:15,560 omdat het veronderstelt dat u gebruikt R interactief. 421 00:22:15,560 --> 00:22:17,310 Als je niet kunt u schrijf twee bestanden die 422 00:22:17,310 --> 00:22:21,600 zijn echt een formaat dat u wilt. 423 00:22:21,600 --> 00:22:25,410 Sorry, ik heb een typfout ik net gerealiseerd. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Als u wilt openen andere grafische apparaat 426 00:22:32,720 --> 00:22:39,200 U kunt deze functie genaamd PNG of gebruik JPEG of een heleboel andere beeldformaten. 427 00:22:39,200 --> 00:22:42,319 En u kunt grafieken te schrijven wat bestandsnaam die u opgeeft. 428 00:22:42,319 --> 00:22:45,110 Annuleren dat je use-- Ik heb dit niet te schrijven in de slide-- 429 00:22:45,110 --> 00:22:49,650 maar er is een functie genaamd dev dot uit dat neemt geen argumenten. 430 00:22:49,650 --> 00:22:51,517 >> Dan zijn er faciliteiten 3D plotten 431 00:22:51,517 --> 00:22:53,350 en voor de contour plotten Als u wilt maken 432 00:22:53,350 --> 00:22:55,700 grafieken van twee onafhankelijke variabelen. 433 00:22:55,700 --> 00:22:57,150 Ik zal niet in deze nu. 434 00:22:57,150 --> 00:22:59,130 >> Er zijn ook enkele faciliteiten voor animatie 435 00:22:59,130 --> 00:23:01,300 deze zijn gewoonlijk onderhouden door derden. 436 00:23:01,300 --> 00:23:06,330 Ik heb animaties met R grafieken gedaan, maar ik heb niet gebruikt deze derden 437 00:23:06,330 --> 00:23:06,940 libraries. 438 00:23:06,940 --> 00:23:09,929 Dus ik kan niet echt getuigen hoe goed ze zijn. 439 00:23:09,929 --> 00:23:12,220 Wat ik aanraden als je wilt om animaties te maken met R 440 00:23:12,220 --> 00:23:16,480 is kunt u uit te schrijven alle de frames voor animaties 441 00:23:16,480 --> 00:23:18,470 en dan kun je gebruik maken van een derden program-- 442 00:23:18,470 --> 00:23:23,630 typische degenen zijn FFmpeg genoemd of ImageMagick-- om te borduren 443 00:23:23,630 --> 00:23:26,540 al je frames in een animatie. 444 00:23:26,540 --> 00:23:28,380 >> Dus tijd voor de demo. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Dus als je met behulp van een Unix-achtig systeem dat is Linux BSD, maar die BSD gebruikt. 447 00:23:37,189 --> 00:23:39,730 OS X opent u een terminal venster en Typ R bij de opdrachtprompt. 448 00:23:39,730 --> 00:23:42,820 Als u R studio of dergelijke, die ook werkt. 449 00:23:42,820 --> 00:23:46,270 Voor Windows-gebruikers moet u in kunnen R vinden in het menu Start. 450 00:23:46,270 --> 00:23:50,390 Het moet iets worden genoemd zoals R x64 3 punt wat dan ook. 451 00:23:50,390 --> 00:23:53,110 Open die daarboven. 452 00:23:53,110 --> 00:23:58,850 >> Dus nu laat me gewoon Open een terminal venster. 453 00:23:58,850 --> 00:24:02,562 Oké, zoeken. 454 00:24:02,562 --> 00:24:03,520 PUBLIEK: Command-Space 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Command-Space, dank je. 456 00:24:06,675 --> 00:24:10,030 Ik denk niet normaal gebruik Macs. 457 00:24:10,030 --> 00:24:13,310 Terminal, tonen een nieuw venster. 458 00:24:13,310 --> 00:24:18,120 Nieuw venster is instellingen basic, R. Dus je moet krijgen 459 00:24:18,120 --> 00:24:22,230 een welkomstbericht, zoiets als dit. 460 00:24:22,230 --> 00:24:31,060 >> Dus ik ben met behulp van R interactief. 461 00:24:31,060 --> 00:24:32,719 U kunt ook schrijven R scripts natuurlijk. 462 00:24:32,719 --> 00:24:34,510 Eigenlijk scripts exact dezelfde manier als 463 00:24:34,510 --> 00:24:40,250 als je achter de computer typen in elke lijn één tegelijk. 464 00:24:40,250 --> 00:24:42,660 Dus laten we beginnen met het maken van een vector. 465 00:24:42,660 --> 00:24:46,230 Een pijl 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 zeker. 468 00:24:50,050 --> 00:24:51,630 Ik kan de lettergrootte groter te maken. 469 00:24:51,630 --> 00:24:53,030 >> PUBLIEK: 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 Oké, wat is dat? 474 00:25:00,370 --> 00:25:00,870 Goed? 475 00:25:00,870 --> 00:25:01,551 OK. 476 00:25:01,551 --> 00:25:03,300 Dus laten we beginnen met het waarbij een vector lijst. 477 00:25:03,300 --> 00:25:08,710 Doe een, pijl, C 1,2,4. 478 00:25:08,710 --> 00:25:11,181 We kunnen zien. 479 00:25:11,181 --> 00:25:12,680 Maak je geen zorgen over de beugel daar. 480 00:25:12,680 --> 00:25:18,590 De beugels zijn dus als je uitprinten zeer lange arrays, kunnen wij waar je bent. 481 00:25:18,590 --> 00:25:26,987 Een voorbeeld zou zijn als ik wil gewoon bereik 2-200. 482 00:25:26,987 --> 00:25:28,820 Als ik gedrukt een zeer lange array, de beugels 483 00:25:28,820 --> 00:25:31,060 zijn gewoon zo kan ik blijven bijhouden welke index 484 00:25:31,060 --> 00:25:33,250 we op als ik ben op zoek door deze visueel. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Dus hoe dan ook, we hebben een. 487 00:25:38,280 --> 00:25:43,326 >> Dus ik al eerder gezegd dat arrays interageren zeer mooi met, bijvoorbeeld, 488 00:25:43,326 --> 00:25:44,450 unaire operaties zoals dit. 489 00:25:44,450 --> 00:25:46,500 Dus wat je denkt dat ik zal als ik typ een 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 Juist, nu ik zorg Deze verschillende array. 493 00:25:54,250 --> 00:26:01,650 Laten we zeggen dat b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Dus wat denk je Dit commando zal doen? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Voeg de elementen. 497 00:26:10,670 --> 00:26:14,950 En dus in feite dat is wat het doet. 498 00:26:14,950 --> 00:26:16,740 Dus dit is erg handig. 499 00:26:16,740 --> 00:26:23,800 Dus hoe zit ik dit doe. c is, laten we zeggen, 6 keer 1-10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Dus wat doe ik wil zien bevatte, denk je? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Dus alle veelvouden van zes. 504 00:26:38,110 --> 00:26:42,170 Nu, wat denk je zal er gebeuren als ik dit doen? 505 00:26:42,170 --> 00:26:48,090 Ik zal dit een beetje duidelijker, c, c maken. 506 00:26:48,090 --> 00:26:50,365 Dus wat gebeurt, doe je denk, als ik dit doe? 507 00:26:50,365 --> 00:26:51,488 een plus c. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [ONHOORBAAR] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> PUBLIEK: Ofwel een fout of er gewoon voegt de eerste drie elementen. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Niet helemaal. 513 00:27:04,510 --> 00:27:05,522 Dit is wat we hebben gekregen. 514 00:27:05,522 --> 00:27:08,910 Wat er gebeurt is een kortere array, een, werd gefietst. 515 00:27:08,910 --> 00:27:13,990 Dus kregen we 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Ja. 517 00:27:15,710 --> 00:27:18,940 En eigenlijk, kunt u bekijken dit gedrag voor, een plus 1, 518 00:27:18,940 --> 00:27:22,190 als een subklasse van dit probleem, waarbij de kortste array is alleen het aantal 519 00:27:22,190 --> 00:27:25,410 1, dat één element array. 520 00:27:25,410 --> 00:27:27,740 Ik gewoon te zeggen alle vector de tijd in plaats van de array, 521 00:27:27,740 --> 00:27:30,290 want dat is wat de r documentatie meestal doet. 522 00:27:30,290 --> 00:27:33,070 Het is een ingesleten gewoonte c. 523 00:27:33,070 --> 00:27:37,590 >> OK, en dus nu hebben we deze array. 524 00:27:37,590 --> 00:27:38,830 Dus we hebben deze array, c. 525 00:27:38,830 --> 00:27:41,380 We kunnen samenvatting krijgen statistieken over c, samenvatting c. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 En dat is leuk. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Dus laten we nu doen wat matrix dingen. 530 00:27:52,670 --> 00:27:56,160 Laten we zeggen dat m is een matrix. 531 00:27:56,160 --> 00:27:57,780 Laten we het een drie bij drie een. 532 00:27:57,780 --> 00:28:01,630 Dus nRows gelijk aan 3, en nCols gelijk aan 3. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 En voor data laten doen-- dus wat denk je dat dit gaat doen? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> Juist, het is de volgende. 537 00:28:16,580 --> 00:28:17,970 Het is nrow en ncolumn. 538 00:28:17,970 --> 00:28:22,164 539 00:28:22,164 --> 00:28:24,580 Dus wat ik heb gedaan is dat ik heb verklaarde een drie bij drie-matrix 540 00:28:24,580 --> 00:28:26,950 en ik heb aangenomen in een negen-element array. 541 00:28:26,950 --> 00:28:30,530 Dus de logaritme van de elementen één tot en met negen. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 En al die waarden te vullen de array-- spijt? 544 00:28:37,285 --> 00:28:38,660 PUBLIEK: Dat zijn base 10 logs? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: Nee, log natuurlijke logaritme, zodat base e. 546 00:28:41,284 --> 00:28:44,886 547 00:28:44,886 --> 00:28:47,010 Ja, als je wilde base 10 log, ik denk dat je zou moeten 548 00:28:47,010 --> 00:28:51,620 om in te loggen wat dan ook, gedeeld door log 10. 549 00:28:51,620 --> 00:28:56,750 En zo de gegevens van de [onverstaanbaar] gewoon vult de matrix, dus van boven naar beneden, 550 00:28:56,750 --> 00:28:59,490 vervolgens van links naar rechts. 551 00:28:59,490 --> 00:29:06,890 En als je wilde een ander te doen array, laten we zeggen n matrix. 552 00:29:06,890 --> 00:29:10,317 Laten we het doen, weet ik niet, 2-13. 553 00:29:10,317 --> 00:29:11,900 Of ik iets interessanter te doen. 554 00:29:11,900 --> 00:29:13,770 Ik doe 2-4. 555 00:29:13,770 --> 00:29:15,780 nrow evenaart, laten we zeggen, 3. 556 00:29:15,780 --> 00:29:18,992 Ncol gelijk aan 4. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Daarom hebben we deze gekregen. 559 00:29:22,090 --> 00:29:26,130 >> En nu willen we deze vermenigvuldigen, we zouden n procent tijden procent te doen, 560 00:29:26,130 --> 00:29:27,680 want dat is n. 561 00:29:27,680 --> 00:29:30,234 562 00:29:30,234 --> 00:29:31,400 En we hebben matrix producten. 563 00:29:31,400 --> 00:29:33,970 564 00:29:33,970 --> 00:29:37,810 Door deze manier, heb je zien hoe toen ik verklaarde n, de 2-4 565 00:29:37,810 --> 00:29:43,570 vector kreeg fietste totdat het vol alle n? 566 00:29:43,570 --> 00:29:45,710 Als je wilde nemen eigenwaarde decompositie, 567 00:29:45,710 --> 00:29:46,960 Dit is iets wat we heel gemakkelijk doen. 568 00:29:46,960 --> 00:29:47,709 We kunnen Eigen n doen. 569 00:29:47,709 --> 00:29:52,290 570 00:29:52,290 --> 00:29:54,600 En dus dit is onze eerste ontmoeting met een lijst. 571 00:29:54,600 --> 00:29:57,000 >> Dus Eigen n is een lijst met twee sleutels. 572 00:29:57,000 --> 00:29:58,430 Waarden, die deze array hier. 573 00:29:58,430 --> 00:30:01,030 En vectoren, die deze array hier. 574 00:30:01,030 --> 00:30:08,240 Dus als je wilde halen, zeggen, deze derde kolom 575 00:30:08,240 --> 00:30:13,080 van de eigenvectoren matrix, omdat de eigenvectoren zijn kolomvectoren. 576 00:30:13,080 --> 00:30:24,400 Dus we kunnen VEC Eigen n dollarteken doen vectoren, comma 3, van [onverstaanbaar]. 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 Is dat, zoals je zou verwachten. 580 00:30:34,100 --> 00:30:39,210 >> Zeg dan n keer procent tijden vec. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Dus hier het resultaat ziet er zeker als als we de derde eigenwaarde hier 583 00:30:48,320 --> 00:30:50,390 wat overeenkomt met de derde eigenvector. 584 00:30:50,390 --> 00:30:53,190 Het vermenigvuldigd gewoon alles in deze eigenvector, component-wise, 585 00:30:53,190 --> 00:30:53,990 door de eigenwaarde. 586 00:30:53,990 --> 00:30:57,760 En dat is wat we zouden verwachten, want dat is wat eigenwaarden zijn. 587 00:30:57,760 --> 00:31:00,890 Heeft hier iemand niet genomen lineaire algebra? 588 00:31:00,890 --> 00:31:02,530 Een paar mensen, OK. 589 00:31:02,530 --> 00:31:04,030 Zet gewoon je hersenen af ​​voor een beetje. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 En inderdaad, als we Eigen n dollarteken waarden 3 keer vec, 592 00:31:20,720 --> 00:31:21,810 goed krijgen hetzelfde. 593 00:31:21,810 --> 00:31:24,726 Het is anders geformatteerd als een rij vector in plaats van een kolomvector, 594 00:31:24,726 --> 00:31:25,640 maar big deal. 595 00:31:25,640 --> 00:31:29,430 596 00:31:29,430 --> 00:31:35,170 En dus die zijn in principe de leuke dingen die we kunnen doen met matrices, 597 00:31:35,170 --> 00:31:36,489 gedemonstreerd lijsten. 598 00:31:36,489 --> 00:31:39,030 Ik zou het leuk te tonen dingen over functies. 599 00:31:39,030 --> 00:31:41,750 >> Dus laten we say-- [onverstaanbaar] functie, bel laten we 600 00:31:41,750 --> 00:31:51,960 Het func tegen functie n n squared-- eigenlijk, dat is niet echt de beste. 601 00:31:51,960 --> 00:31:55,632 a, b, een kwadraat plus b. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Dus een ding over functies weer, is zij 604 00:32:00,380 --> 00:32:01,963 do expliciete terugkeer verklaringen niet nodig. 605 00:32:01,963 --> 00:32:04,250 Dus je kunt het gewoon-- laatste verklaring geëvalueerd 606 00:32:04,250 --> 00:32:07,502 zal de verklaring terug te zijn, of de waarde geretourneerd. 607 00:32:07,502 --> 00:32:10,460 Dus in dit geval, we alleen evalueren een statement, een kwadraat plus b. 608 00:32:10,460 --> 00:32:12,043 Dat zal de standaard return waarde. 609 00:32:12,043 --> 00:32:14,530 Het kan nooit kwaad om te zetten expliciet terug waarden, 610 00:32:14,530 --> 00:32:16,880 vooral als je te maken hebt met een functie van zeer ingewikkelde logica 611 00:32:16,880 --> 00:32:17,380 stromen. 612 00:32:17,380 --> 00:32:18,450 Maar je ze niet nodig hebt. 613 00:32:18,450 --> 00:32:24,890 Dus nu kunnen we func 5, 1 doen en Dit is eigenlijk wat je zou verwachten. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Iets anders wat we kunnen doen, kunnen we eigenlijk doen func b 616 00:32:31,270 --> 00:32:33,260 gelijk aan 1, een 5 gelijk. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Dus als we hier specificeren welk nummer, die redenering gaat naar die argumenten 619 00:32:40,770 --> 00:32:44,680 in de functie, kunnen we rond spiegelen deze waarden waar we willen. 620 00:32:44,680 --> 00:32:48,405 >> PUBLIEK: Is er een reden om het uit te schrijven met de b 621 00:32:48,405 --> 00:32:52,404 gelijk in tegenstelling tot enkel het gebruik van de nummers en de komma? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Ja, meestal Dit doen als je functies 623 00:32:54,820 --> 00:32:58,540 met veel argumenten. 624 00:32:58,540 --> 00:33:00,690 Dat zou vaak worden als vlaggen die je zou alleen 625 00:33:00,690 --> 00:33:03,130 wilt gebruiken in zeldzame gevallen. 626 00:33:03,130 --> 00:33:06,740 En deze manier kun je je only-- kan verwijzen naar de specifieke argumenten 627 00:33:06,740 --> 00:33:09,110 die u wilt gebruiken niet-standaard waarden voor, 628 00:33:09,110 --> 00:33:14,470 en je hoeft niet een uit te schrijven stelletje vlaggen gelijk valse na hen. 629 00:33:14,470 --> 00:33:19,710 Of ik kan dit opnieuw te schrijven met een standaardwaarde als b is gelijk aan 2. 630 00:33:19,710 --> 00:33:26,289 En dan kon ik f func doen, Ik doe 4, 1 deze tijd. 631 00:33:26,289 --> 00:33:28,580 En 17, die 4 vierkante plus 1, zoals je zou verwachten. 632 00:33:28,580 --> 00:33:34,290 >> Maar ik kon ook gewoon Dit noemen met func 4, 633 00:33:34,290 --> 00:33:36,970 en ik krijg 18, omdat Ik wil niet opgeven b. 634 00:33:36,970 --> 00:33:38,550 Dus b krijgt de standaard waarde van 2. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, dus als je nu bent volgende samen met de demo, 637 00:33:47,200 --> 00:33:51,010 typt u deze lijn op uw commando prompt en zie wat omhoog komt. 638 00:33:51,010 --> 00:33:52,090 Eigenlijk, doe dat niet. 639 00:33:52,090 --> 00:33:52,590 Vul dit. 640 00:33:52,590 --> 00:33:57,780 641 00:33:57,780 --> 00:34:01,000 Je moet iets als dit te krijgen. 642 00:34:01,000 --> 00:34:04,780 Dus mtcars is een ingebouwde data die voor deze demonstratie 643 00:34:04,780 --> 00:34:13,550 doeleinden die komt met-- die komt in standaard met uw r distributie. 644 00:34:13,550 --> 00:34:19,211 Dit is een compilatie van statistieken uit een 1974 nummer van het tijdschrift Motor Trend's 645 00:34:19,211 --> 00:34:20,710 een aantal verschillende modellen. 646 00:34:20,710 --> 00:34:28,270 >> Dus er is mijl per gallon, cylinders-- Ik vergeten wat disp is-- pk. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Waarschijnlijk. 649 00:34:32,420 --> 00:34:36,920 Als je gewoon Google MT auto's, dan is een van de eerste resultaten 650 00:34:36,920 --> 00:34:38,730 zal de officiële r documentatie 651 00:34:38,730 --> 00:34:41,080 en het uitleggen deze gegevensvelden. 652 00:34:41,080 --> 00:34:47,020 Dus gewicht is-- gew gewicht van de auto in tonnen. 653 00:34:47,020 --> 00:34:48,880 Q sec is de kwart mijl tijd. 654 00:34:48,880 --> 00:34:52,409 655 00:34:52,409 --> 00:34:55,850 Dus nu kunnen we een aantal leuke dingen te doen over MT auto's is een data veld. 656 00:34:55,850 --> 00:35:01,640 >> Dus kunnen we dingen doen zoals rij namen, mt auto's. 657 00:35:01,640 --> 00:35:05,490 En dit is een overzicht van alle rijen in de set gegevens die de namen van de auto's zijn. 658 00:35:05,490 --> 00:35:10,780 We kunnen colnames, mt auto's doen. 659 00:35:10,780 --> 00:35:15,500 Als je dat doet mt auto's, sub-numerieke index, net als 2. 660 00:35:15,500 --> 00:35:18,177 krijgen we de tweede kolom uit Dit, hetgeen cylinders. 661 00:35:18,177 --> 00:35:19,370 >> Publiek: Wat heb je gedaan? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: Ik typte mt auto's, beugels e, 663 00:35:21,570 --> 00:35:24,180 die mij de tweede gaf kolom van mt auto. 664 00:35:24,180 --> 00:35:34,501 665 00:35:34,501 --> 00:35:38,110 Of als we willen een rij, kan ik typ mtcars komma 2, bijvoorbeeld. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Andere ronde 2 komma, als dat. 668 00:35:46,390 --> 00:35:48,880 En dat gaat in uw rij. 669 00:35:48,880 --> 00:35:54,680 Dit hier gewoon geeft u een column, maar kolom als vector. 670 00:35:54,680 --> 00:36:04,634 671 00:36:04,634 --> 00:36:06,425 Ik besefte nu dat ik vergat aan te tonen 672 00:36:06,425 --> 00:36:09,150 een aantal leuke dingen over vectoren dat je kunt doen met indices. 673 00:36:09,150 --> 00:36:10,480 Dus laat ik dat doen nu. 674 00:36:10,480 --> 00:36:17,130 Dus laten we het doen c gets-- zetten Deze op pause-- 2 keer 1-10. 675 00:36:17,130 --> 00:36:21,360 Dus c is gewoon gaat worden de vector 2 tot en met 20. 676 00:36:21,360 --> 00:36:24,640 Ik kan elementen nemen als dit, c2. 677 00:36:24,640 --> 00:36:30,942 Ik kan overgaan in een vector als deze, C-- laat me 678 00:36:30,942 --> 00:36:34,470 Gebruik andere naam dan c, zoals vec c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 Kortom, ben ik aan het doen dit zodat je niet krijgen 681 00:36:39,340 --> 00:36:45,010 verward tussen c als vector bouw functie, 682 00:36:45,010 --> 00:36:48,800 en c als een variabele naam. 683 00:36:48,800 --> 00:36:53,120 Vec beugels c 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Dit zal me uit de vierde, vijfde, en zeven elementen van de array. 685 00:36:56,540 --> 00:37:01,740 Ik kan vec doen, in een negatieve index, net als negatief 4. 686 00:37:01,740 --> 00:37:06,500 Dat zal me dit te krijgen met het vierde element verwijderd. 687 00:37:06,500 --> 00:37:10,140 Dan als ik wilde plakken doen, Ik kan vec 2 doen tot en met 6. 688 00:37:10,140 --> 00:37:15,480 2 dubbele punt 6 is gewoon een andere vector, die 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Spuugt dat. 690 00:37:18,230 --> 00:37:20,770 >> Dus hoe dan ook, terug naar mt auto's. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Dus laten we doen wat regressies. 693 00:37:28,450 --> 00:37:34,240 Laten we zeggen dat model gets-- laten lineair regress-- Ik weet het niet. 694 00:37:34,240 --> 00:37:41,780 Laten we eerst doen hechten mtcars, natuurlijk. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Dus [onverstaanbaar] model lm, laten we terugvallen mijl per gallon op tilde gewicht. 697 00:38:00,010 --> 00:38:03,300 En dan data frame mtcars. 698 00:38:03,300 --> 00:38:06,830 Dus samenvatting model. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, dus dit lijkt een beetje ingewikkeld. 701 00:38:15,595 --> 00:38:19,380 Maar in principe, aangezien als we probeer mijl per gallon te uiten 702 00:38:19,380 --> 00:38:23,970 als een lineaire functie van het gewicht, toen kwamen we deze lijn hier, 703 00:38:23,970 --> 00:38:28,730 die onderschept op 37,28. 704 00:38:28,730 --> 00:38:33,830 37,28 zou de theoretische mijl per gallon van een auto die nul weegt. 705 00:38:33,830 --> 00:38:41,210 En dan voor elke extra ton, je knock ongeveer vijf mijl per gallon 706 00:38:41,210 --> 00:38:42,440 off van dat. 707 00:38:42,440 --> 00:38:45,120 Beide coëfficiënten u kan er, standaard fouten te zien. 708 00:38:45,120 --> 00:38:47,870 En ze zijn zeer statistisch significant. 709 00:38:47,870 --> 00:38:55,740 >> Zo kunnen we heel zeker te zijn 1 e 10 de negatieve 10. 710 00:38:55,740 --> 00:38:59,510 Dus 1 keer iets aan de negatieve 10, dat als je een zwaardere auto te maken, 711 00:38:59,510 --> 00:39:01,440 het zal moeten erger mijl per gallon. 712 00:39:01,440 --> 00:39:04,940 713 00:39:04,940 --> 00:39:07,250 Of we kunnen een ander model te testen. 714 00:39:07,250 --> 00:39:09,230 Zoals in plaats van achteruit dit gewicht, 715 00:39:09,230 --> 00:39:12,600 laten we terugvallen het op logboek van het gewicht, want misschien de effectieve gewicht 716 00:39:12,600 --> 00:39:15,690 op kilometerstand is een of andere manier niet lineair. 717 00:39:15,690 --> 00:39:18,540 >> Dit gaf ons een r kwadraat van 0,7528. 718 00:39:18,540 --> 00:39:19,610 Dus laten we proberen dit. 719 00:39:19,610 --> 00:39:21,485 Deze keer laten we een andere variabele, ook. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Dus Kortom, model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 Oké, dus nogmaals, we kregen hier onze best passende lijn. 724 00:39:31,390 --> 00:39:36,160 En dit tijd-- dit zegt, in feite dat elke keer dat u 725 00:39:36,160 --> 00:39:38,090 verhoging van het gewicht van een wagen met een factor e 726 00:39:38,090 --> 00:39:40,580 je verliest zoveel mijl per gallon. 727 00:39:40,580 --> 00:39:43,210 728 00:39:43,210 --> 00:39:50,326 >> En dus deze keer onze resterende standaard fout het-- dat maakt niet uit, echt. 729 00:39:50,326 --> 00:39:53,540 De resterende standaard fout eigenlijk gewoon de standaard fout 730 00:39:53,540 --> 00:39:57,760 dat je nog hebt na neem de trendlijn weg. 731 00:39:57,760 --> 00:40:02,805 En onze r hier kwadraat is 0,81, dat is een beetje beter dan wat 732 00:40:02,805 --> 00:40:07,640 we eerder hadden, 0,52. 733 00:40:07,640 --> 00:40:09,750 >> En nu laten we voegen een termijn regressie. 734 00:40:09,750 --> 00:40:13,020 Dus laten we terugvallen mijl per gallon zowel op het logboek van de gewichten 735 00:40:13,020 --> 00:40:21,130 en, laten we het doen, q mijl, kwart mijl tijd. 736 00:40:21,130 --> 00:40:26,190 OK, moet het the-- goed, qsec hebben. 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-- sorry, wat? 740 00:40:35,000 --> 00:40:37,000 Laat me dit iets te bellen anders naast model2. 741 00:40:37,000 --> 00:40:38,000 Laat me dit model3 noemen. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 En nu kunnen we samenvatting model3 doen. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 En dus nogmaals, dit is in feite wat je zou verwachten. 746 00:40:49,100 --> 00:40:51,750 Je hebt een positieve onderscheppen. 747 00:40:51,750 --> 00:40:54,550 De effectieve toenemende gewicht is negatief. 748 00:40:54,550 --> 00:40:58,490 En de effectieve toenemende kwart mijl tijd 749 00:40:58,490 --> 00:41:02,420 is positief, maar wel minder dan gewicht. 750 00:41:02,420 --> 00:41:06,010 Nu intuïtief, kunt u gevoel van te maken dit door te zeggen na te denken over sportwagens. 751 00:41:06,010 --> 00:41:08,950 Er is een zeer snelle acceleratie, een zeer korte kwart mijl tijden. 752 00:41:08,950 --> 00:41:13,729 Ze zijn ook van plan om meer gas te gebruiken, terwijl verstandiger auto's gaan 753 00:41:13,729 --> 00:41:16,020 trager acceleratie, hogere kwart mijl tijden, 754 00:41:16,020 --> 00:41:20,890 en het gebruik van minder gas ,, zo hoger mijl per gallon. 755 00:41:20,890 --> 00:41:21,390 Grote. 756 00:41:21,390 --> 00:41:23,431 En nu is het tijd om plot iets als dit. 757 00:41:23,431 --> 00:41:27,810 Dus laten we doen-- zo kaal botten kunnen we plots-- doen 758 00:41:27,810 --> 00:41:35,280 omdat ik deze data-frame hebben bevestigd before-- we kunnen gewoon doen percelen, gew mpg. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Maken dit een beetje groter. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Daar we in principe een scatter plot, maar de punten 763 00:41:57,350 --> 00:41:58,690 zijn een beetje moeilijk te zien op dit punt. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Ik weet niet onvoorbereid wat het onthouden syntax is voor het veranderen van het perceel. 766 00:42:10,900 --> 00:42:14,100 Dus ik denk dat dit zal zijn een goed moment om te brengen, 767 00:42:14,100 --> 00:42:18,000 er is een zeer mooie ingebouwde help functie, hulp citaten functioneren naam. 768 00:42:18,000 --> 00:42:21,690 We zullen up principe brengen alles wat je wilt. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Ik denk dat ik dit ook daadwerkelijk te doen soort gelijk p voor punten percelen. 771 00:42:32,730 --> 00:42:34,369 Heeft die iets veranderen? 772 00:42:34,369 --> 00:42:35,160 En nee, niet echt. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Prima. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> Om een ​​of andere reden, toen ik dit deed op mijn eigen computer een tijdje geleden, 777 00:42:49,580 --> 00:42:52,080 alle scatter punten waren veel duidelijker. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 Hoe dan ook, zijn de scatter soort zichtbaar? 780 00:43:13,970 --> 00:43:15,124 Er is één daar. 781 00:43:15,124 --> 00:43:16,165 Een paar daar, een paar daar. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 U kunt ze soort van te zien, toch? 784 00:43:21,185 --> 00:43:24,310 Dus als we willen een best passende lijn toe te voegen om dit perceel hier, dat is een beetje kaal 785 00:43:24,310 --> 00:43:29,290 bones-- laat me het een beetje mooier. 786 00:43:29,290 --> 00:43:38,075 Hoofd gelijk versus gewicht. 787 00:43:38,075 --> 00:43:46,322 788 00:43:46,322 --> 00:43:49,740 Mijl per gallon. 789 00:43:49,740 --> 00:43:53,570 Ook hier kunt u zien hoe nuttig optionele argumenten zijn hier met ook 790 00:43:53,570 --> 00:43:58,090 niet hebben om dingen in te zetten bepaalde volgorde met argumenten toetsenbord 791 00:43:58,090 --> 00:44:01,600 als je plots, omdat deze nemen veel argumenten. 792 00:44:01,600 --> 00:44:07,490 >> XLAB is gelijk aan het gewicht, gewicht, ton. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Prima. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, ja, dit apparaat is een beetje vervelend. 797 00:44:21,480 --> 00:44:30,160 Maar je kunt een soort van daar te zien, er is een grafiek titel op de zijkant. 798 00:44:30,160 --> 00:44:35,260 Hier there's-- op de bodem hier zijn er aslabels. 799 00:44:35,260 --> 00:44:37,700 Ik herinner me niet onvoorbereid wat de commando ars-- 800 00:44:37,700 --> 00:44:41,000 welke functies stijgen de grootte van de labels en titels 801 00:44:41,000 --> 00:44:43,110 maar ze zijn er. 802 00:44:43,110 --> 00:44:46,625 >> En dus als we willen voeg de best passende lijn, 803 00:44:46,625 --> 00:44:49,250 we iets konden doen like-- I hebben de syntax hier opgeschreven. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Zo herinneren we ons voeg model was mpg, gewicht, mtcars. 806 00:45:11,130 --> 00:45:16,470 En dus als ik wilde een beste pasvorm toe lijn, kon ik a, b lijn model doen. 807 00:45:16,470 --> 00:45:18,556 En giek, hebben we een best passende lijn. 808 00:45:18,556 --> 00:45:19,970 Het is een beetje moeilijk om weer te zien. 809 00:45:19,970 --> 00:45:22,178 Ik ben heel droevig over de technologische moeilijkheden. 810 00:45:22,178 --> 00:45:25,230 Maar het loopt in principe linksboven naar rechtsonder. 811 00:45:25,230 --> 00:45:27,550 >> En als de schaal waren grotere voorsprong 812 00:45:27,550 --> 00:45:31,260 dat het snijpunt is wat je kan vinden van de samenvattende statistieken 813 00:45:31,260 --> 00:45:34,790 Als u typt samenvatting model. 814 00:45:34,790 --> 00:45:40,130 OK, dus ik hoop dat iedereen krijgt iets van een gevoel van wat 815 00:45:40,130 --> 00:45:42,030 R is, wat het is goed voor. 816 00:45:42,030 --> 00:45:45,520 Je zou veel mooier dan plots te maken dit op je eigen tijd, als je wilt. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Zodat de buitenlandse functie interface. 819 00:45:53,950 --> 00:46:00,330 Dit is iets dat is niet typisch bedekt met inleidende lezingen 820 00:46:00,330 --> 00:46:03,560 of inleidende iets voor r. 821 00:46:03,560 --> 00:46:05,584 Het is niet waarschijnlijk dat je zult het nodig hebben. 822 00:46:05,584 --> 00:46:08,000 Maar ik vond het nuttig in mijn eigen projecten in het verleden. 823 00:46:08,000 --> 00:46:10,984 En er is geen goed tutorial voor het online. 824 00:46:10,984 --> 00:46:12,900 Dus ik ga gewoon haast u allen door deze 825 00:46:12,900 --> 00:46:16,606 en dan ben je vrij om te vertrekken. 826 00:46:16,606 --> 00:46:18,480 En zo de buitenlandse functie-interface is wat 827 00:46:18,480 --> 00:46:23,130 u kunt gebruiken om te bellen om te zien functies met R. Intern 828 00:46:23,130 --> 00:46:29,850 R is gebouwd op C. R's rekenkunde is gewoon C's 64-bit floating point rekenkunde, 829 00:46:29,850 --> 00:46:32,852 dat is het type dubbel [onverstaanbaar]. 830 00:46:32,852 --> 00:46:35,060 En je zou willen doen dit voor een heleboel redenen. 831 00:46:35,060 --> 00:46:39,250 Voor één, is R geïnterpreteerd, het is niet gecompileerd tot aan machine code. 832 00:46:39,250 --> 00:46:42,170 Dus je kunt herschrijven uw innerlijke lussen in C en dan 833 00:46:42,170 --> 00:46:45,920 het voordeel dat R. Like het is een beetje handiger dan C. 834 00:46:45,920 --> 00:46:48,899 Het heeft een betere grafische faciliteiten en wat al niet. 835 00:46:48,899 --> 00:46:51,690 En terwijl het nog steeds in staat om topsnelheid uit de binnenste lussen, 836 00:46:51,690 --> 00:46:53,650 dat is waar je echt nodig hebt. 837 00:46:53,650 --> 00:46:56,330 >> Hergebruik van bestaande C bibliotheken, dat is ook belangrijk. 838 00:46:56,330 --> 00:47:00,320 Als u een aantal C bibliotheek voor als, Ik weet het niet, Fourier-transformaties, 839 00:47:00,320 --> 00:47:05,190 of een zeer Archean statistieken gebruikte procedure 840 00:47:05,190 --> 00:47:09,470 in hoge energie-astrofysica of iets, ik weet het niet. 841 00:47:09,470 --> 00:47:13,058 Hoge energie-astrofysica is niet eens een denk, denk ik. 842 00:47:13,058 --> 00:47:16,480 Maar je kunt dat doen in plaats van het hebben van een inwoner R haven van hen te schrijven. 843 00:47:16,480 --> 00:47:22,725 En the-- en weer, alsof je kijk in de meeste R's standaard bibliotheken, 844 00:47:22,725 --> 00:47:25,600 op de inwendige, de internals gaat naar de buitenlandse functie te gebruiken 845 00:47:25,600 --> 00:47:26,724 de interface zeer uitgebreid. 846 00:47:26,724 --> 00:47:31,630 Ze zullen dingen als Fourier hebben transformeert of het berekenen van de correlatie 847 00:47:31,630 --> 00:47:34,890 coëfficiënten geschreven in C, en ze zullen gewoon R wrappers om hen heen. 848 00:47:34,890 --> 00:47:38,230 De interface is een beetje moeilijk. I denk 849 00:47:38,230 --> 00:47:43,750 de moeilijkheidsgraad is overdreven in een Veel van de instructies die u zult vinden. 850 00:47:43,750 --> 00:47:46,200 Maar toch is het een beetje verwarrend. 851 00:47:46,200 --> 00:47:48,650 En ik heb niet in staat geweest om vinden van een goede tutorial voor het, 852 00:47:48,650 --> 00:47:51,980 dus dit is het nu. 853 00:47:51,980 --> 00:47:55,360 Ook dit hele segment is meer voor latere referentie. 854 00:47:55,360 --> 00:47:57,687 Maak je geen zorgen over het kopiëren alles tot nu. 855 00:47:57,687 --> 00:48:00,020 Dus de volgende instructies zijn voor Unix-achtige systemen, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Ik weet het niet hoe dit werkt op Windows, 857 00:48:05,150 --> 00:48:08,280 maar neem dan gewoon niet doe je afstudeerproject op Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Je echt niet wilt. 860 00:48:12,460 --> 00:48:14,770 Unix is ​​veel beter set up voor casual programmering. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Dus, eigenlijk buitenlandse functie interface. 863 00:48:21,390 --> 00:48:24,420 Als u wilt een C schrijven functie voor gebruik met R, 864 00:48:24,420 --> 00:48:27,250 het moet alle nemen argumenten als pointers. 865 00:48:27,250 --> 00:48:30,666 >> Dus voor enkele waarden, deze betekent dat het gewezen op de waarde. 866 00:48:30,666 --> 00:48:33,040 Voor arrays is dit een pointer het eerste element, waarbij 867 00:48:33,040 --> 00:48:36,750 is wat reeks namen eigenlijk. 868 00:48:36,750 --> 00:48:40,140 Nogmaals, dit is iets wat je moet hebben mooie volledig af na p vijf. 869 00:48:40,140 --> 00:48:43,334 Array namen zijn pointers het eerste element, 870 00:48:43,334 --> 00:48:44,750 Het type floating-point is dubbel. 871 00:48:44,750 --> 00:48:47,310 En uw functie moet leegte terugkeren. 872 00:48:47,310 --> 00:48:50,810 De enige manier waarop het kan eigenlijk te vertellen wat er gebeurd is R 873 00:48:50,810 --> 00:48:54,410 is door het modificeren van het geheugen dat R gaf het door de vreemde functie 874 00:48:54,410 --> 00:48:54,910 interface. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Dus ik heb deze schriftelijke Bijvoorbeeld hier, is 877 00:49:00,127 --> 00:49:02,460 een functie die gebruik berekent inwendig product van twee vectoren. 878 00:49:02,460 --> 00:49:05,060 Het duurt twee argumenten, vec1, vec2, die de vectoren zelf, 879 00:49:05,060 --> 00:49:06,934 en n, die een lengte, omdat weer, 880 00:49:06,934 --> 00:49:12,630 R heeft een ingebouwde [onverstaanbaar] om uit te vinden de lengte van vectoren, maar C niet. 881 00:49:12,630 --> 00:49:16,182 In C, vectoren een willekeurige afgebakend deel van het geheugen. 882 00:49:16,182 --> 00:49:17,890 Dus de manier waarop u kunt berekenen dot producten 883 00:49:17,890 --> 00:49:23,470 is alleen deze uiteengezet parameter naar nul en dan doorloopt 884 00:49:23,470 --> 00:49:28,760 van 1 tot n ster, omdat n is een pointer op de lengte 885 00:49:28,760 --> 00:49:32,929 gewoon iets toe te voegen aan dit uit parameter. 886 00:49:32,929 --> 00:49:34,970 En het kan een goede praktijk als je gaat doen 887 00:49:34,970 --> 00:49:37,270 Deze twee afzonderlijke C-functies schrijven. 888 00:49:37,270 --> 00:49:41,970 Eén van hen has-- een van hen gewoon neemt de argumenten en de soorten 889 00:49:41,970 --> 00:49:43,970 dat zij normaal zouden zijn C. 890 00:49:43,970 --> 00:49:47,780 >> Dus het duurt een scala argumenten als pointers. 891 00:49:47,780 --> 00:49:57,090 Maar argumenten single-waarde als n, het duurt slechts als waarden van kopiëren, 892 00:49:57,090 --> 00:49:57,917 zonder pointers. 893 00:49:57,917 --> 00:49:59,750 En dan maakt het niet [Onverstaanbaar] uit pointer. 894 00:49:59,750 --> 00:50:01,290 En dan kun je een andere, in principe, 895 00:50:01,290 --> 00:50:03,623 wrapper functie die in feite handelt de vereisten 896 00:50:03,623 --> 00:50:07,740 van de buitenlandse functie interface voor jou. 897 00:50:07,740 --> 00:50:11,840 >> De manier waarop u deze oproep in R is, zodra u uw functie geschreven in C, 898 00:50:11,840 --> 00:50:17,770 u R cmd shlib folder, R typt commando gedeelde bibliotheek, 899 00:50:17,770 --> 00:50:20,110 foo dot c, of wat dan ook uw bestandsnaam, 900 00:50:20,110 --> 00:50:23,020 en OS shell niet in de R terminal. 901 00:50:23,020 --> 00:50:25,200 En deze zal creëren bibliotheek genaamd foo dot zo. 902 00:50:25,200 --> 00:50:28,180 En dan kun je het laden onze script of interactief 903 00:50:28,180 --> 00:50:32,310 met commando dyn dot belasting. 904 00:50:32,310 --> 00:50:35,720 Dan is er een functie in R genaamd dot c. 905 00:50:35,720 --> 00:50:39,310 >> Dit duurt argumenten die eerst de naam van de functie C 906 00:50:39,310 --> 00:50:40,970 dat u wilt bellen. 907 00:50:40,970 --> 00:50:43,920 En dan alle parameters die functie, 908 00:50:43,920 --> 00:50:45,420 ze moeten in de juiste volgorde. 909 00:50:45,420 --> 00:50:48,580 Je moet dit soort gebruik dwang fungeert als geheel, als 910 00:50:48,580 --> 00:50:52,050 dubbel, zoals karakter, en als logisch. 911 00:50:52,050 --> 00:50:54,710 En toen het geeft de lijst, die weer net 912 00:50:54,710 --> 00:50:57,550 een bijbehorende matrix van de parameter namen en de waarden 913 00:50:57,550 --> 00:51:00,950 nadat de functie is uitgevoerd. 914 00:51:00,950 --> 00:51:08,520 >> Dus in dit geval, want dot prod heeft argumenten vec1, vec2 en int n, n uit. 915 00:51:08,520 --> 00:51:11,980 Dot c we dot prod, de naam van de functie 916 00:51:11,980 --> 00:51:16,250 We noemen, vec1, vec2 type dwingen. 917 00:51:16,250 --> 00:51:20,060 De lengte van één vector, Ik koos gewoon vec1 arbitrair. 918 00:51:20,060 --> 00:51:25,479 Het zou robuuster te s zeggen integer min lengte van vec1, lengte vec2. 919 00:51:25,479 --> 00:51:27,520 Dan net als dubbele nul, omdat we niet echt 920 00:51:27,520 --> 00:51:29,644 schelen wat er in de out parameter omdat we 921 00:51:29,644 --> 00:51:32,270 oprichting ervan toch nul. 922 00:51:32,270 --> 00:51:37,560 >> En dan de resultaten gaan een te zijn grote bijbehorende reeks van in principe 923 00:51:37,560 --> 00:51:42,090 vec1 is wat, vec2 is wat dan ook. 924 00:51:42,090 --> 00:51:44,330 Maar we zijn geïnteresseerd in , dus kunnen we dat uit. 925 00:51:44,330 --> 00:51:47,780 Dit is weer een heel stuk speelgoed voorbeeld van vreemde functie interface. 926 00:51:47,780 --> 00:51:54,160 Maar als je moet dot berekenen producten van massieve vectoren in lussen, 927 00:51:54,160 --> 00:51:56,960 of als u hoeft te doen iets anders in een lus, 928 00:51:56,960 --> 00:51:59,850 en je wilt niet te vertrouwen op R, die wel een beetje overhead 929 00:51:59,850 --> 00:52:02,830 ingebouwd, kan het nuttig zijn. 930 00:52:02,830 --> 00:52:05,870 >> Nogmaals, dit is meestal een inleidende onderwerp R. 931 00:52:05,870 --> 00:52:08,571 Het is niet erg goed gedocumenteerd. 932 00:52:08,571 --> 00:52:11,070 Ik ben gewoon met inbegrip omdat Ik vond het nuttig in het verleden. 933 00:52:11,070 --> 00:52:13,654 Dus, slechte praktijken. 934 00:52:13,654 --> 00:52:15,820 Ik heb gezegd dat er een lus in de functie. 935 00:52:15,820 --> 00:52:21,150 Over het algemeen moet je niet in de taal, niet gebruiken. 936 00:52:21,150 --> 00:52:26,100 Op basis van hoe R implementeert iteratie intern, kan het langzaam zijn. 937 00:52:26,100 --> 00:52:28,540 Ze gewoon kijken ook lelijk. 938 00:52:28,540 --> 00:52:32,410 >> R behandelt vectoren zeer mooi, dus vaak je niet nodig om het te gebruiken. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Dan kan je meestal Vervang vaak een vector 941 00:52:38,900 --> 00:52:42,490 deze functies 'high orde functies, Kaart, verkleinen, 942 00:52:42,490 --> 00:52:44,404 Vinden, of Filter. 943 00:52:44,404 --> 00:52:46,320 Ik geef een aantal voorbeelden van wat deze doet. 944 00:52:46,320 --> 00:52:49,957 Kaart is een hogere orde functie omdat het neemt een functie als argument. 945 00:52:49,957 --> 00:52:52,290 Zodat je het een functie kan geven, je kunt geven een array, 946 00:52:52,290 --> 00:52:54,640 en het zal de functie van toepassing elk element van de array 947 00:52:54,640 --> 00:52:55,681 en de terugkeer van de nieuwe array. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Te verminderen, in principe geef je het een array, geef je 950 00:53:00,160 --> 00:53:02,930 een functie die twee argumenten neemt. 951 00:53:02,930 --> 00:53:07,100 Het zal de functie eerste, de toepassing eerste argument met enkele starter waarde. 952 00:53:07,100 --> 00:53:09,440 Dan om dat resultaat in de tweede. 953 00:53:09,440 --> 00:53:12,590 Dan die in het derde, dan die in het vierde. 954 00:53:12,590 --> 00:53:14,870 En dan terug te keren wanneer het wordt tot het einde. 955 00:53:14,870 --> 00:53:17,620 Dus bijvoorbeeld, als je wilt bereken de som van alle elementen 956 00:53:17,620 --> 00:53:23,240 in een array, dan je zou kunnen noemen verminderen met [onverstaanbaar] verminderen aanvulling 957 00:53:23,240 --> 00:53:26,620 functie, zoals func a, b, terug een plus b. 958 00:53:26,620 --> 00:53:28,960 En dan beginnen een waarde van 0. 959 00:53:28,960 --> 00:53:32,950 >> En al deze, kan je ze vinden in de R worden beschreven 960 00:53:32,950 --> 00:53:35,720 in een leerboek over functioneel programmeren. 961 00:53:35,720 --> 00:53:38,330 Er is ook deze klasse van functies genaamd toepassing functies, 962 00:53:38,330 --> 00:53:42,807 die ik don't-- ze een beetje moeilijk uit te leggen, 963 00:53:42,807 --> 00:53:45,640 maar als je kijkt in de [onverstaanbaar] geboekt die ik aangehaald in het begin, 964 00:53:45,640 --> 00:53:48,615 hij hen vertelt vrij goed in zijn appendix op R programmering. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Meer over praktijken, voegen vectoren. 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 Ik denk dat ik zou moeten corrigeren. 971 00:54:02,900 --> 00:54:07,450 In die eerste lijn, vec pijl, dat de pijl zou er niet zijn. 972 00:54:07,450 --> 00:54:10,920 U kunt toewijzen aan een vector, wederom, door neem de lengte plus 1 973 00:54:10,920 --> 00:54:13,220 en het toewijzen van enige waarde die. 974 00:54:13,220 --> 00:54:18,970 Dat zal de vector uit te breiden, of u kan doen vec gelijken c, vec newValue. 975 00:54:18,970 --> 00:54:21,540 Nogmaals, als je C gebruiken één argument als een vector, 976 00:54:21,540 --> 00:54:23,300 de resulterende hiërarchie wordt afgevlakt. 977 00:54:23,300 --> 00:54:27,160 Dus je zult gewoon een vector dat is uitgebreid met 1. 978 00:54:27,160 --> 00:54:30,410 Dit doet nooit. 979 00:54:30,410 --> 00:54:33,330 >> De reden waarom u niet moet doen is dit. 980 00:54:33,330 --> 00:54:37,430 Wanneer u een vector toe te rekenen, geeft het een bepaald stuk van het geheugen. 981 00:54:37,430 --> 00:54:40,680 Als u te verhogen dat vector formaat, het moet de vector herverdelen 982 00:54:40,680 --> 00:54:43,820 ergens anders. 983 00:54:43,820 --> 00:54:46,980 En dus herverdeling is vrij duur. 984 00:54:46,980 --> 00:54:50,530 Ik zal niet ingaan op de details van hoe gaan geheugen allocators worden geïmplementeerd 985 00:54:50,530 --> 00:54:57,280 op het niveau van het besturingssysteem, maar het kost veel tijd 986 00:54:57,280 --> 00:54:58,962 een nieuw stuk van het geheugen te vinden. 987 00:54:58,962 --> 00:55:00,920 En ook, als je opnieuw toewijzen van veel en veel 988 00:55:00,920 --> 00:55:03,500 van steeds grotere brokken, je uiteindelijk 989 00:55:03,500 --> 00:55:06,420 met iets genaamd geheugen fragmentatie, 990 00:55:06,420 --> 00:55:09,390 waarbij het beschikbare geheugen verdeeld in veel kleine blokken 991 00:55:09,390 --> 00:55:11,500 in het geheugen allocators oogpunt. 992 00:55:11,500 --> 00:55:15,340 En het moeilijker en moeilijker krijgt geheugen voor andere dingen vinden. 993 00:55:15,340 --> 00:55:19,455 Dus in plaats daarvan, als je nodig hebt om dit te doen, indien, je nodig hebt om een ​​vector te groeien van het ene einde 994 00:55:19,455 --> 00:55:24,240 naar de volgende plaats van te voegen constant, moet je pre-wijzen het. 995 00:55:24,240 --> 00:55:29,310 Vec pijl, vector lengte gelijk aan 1000, of wat dan ook. 996 00:55:29,310 --> 00:55:33,200 >> En dan kun je gewoon toewijzen om de vector van waarden één 997 00:55:33,200 --> 00:55:36,000 een keer nadat je het een keer hebt toegewezen. 998 00:55:36,000 --> 00:55:40,140 Ik liep in deze, nogmaals, mijn zomerbaan toen ik aan het schrijven was NRA differentieel 999 00:55:40,140 --> 00:55:42,120 vergelijkingsoplosser. 1000 00:55:42,120 --> 00:55:43,180 Niet symbolische numerieke. 1001 00:55:43,180 --> 00:55:49,290 Het idee is dat als je eenmaal hebt één waarde voor uw oplossing, 1002 00:55:49,290 --> 00:55:51,240 je dat gebruikt om het volgende te berekenen. 1003 00:55:51,240 --> 00:55:53,700 Dus mijn natuurlijke naïeve neiging was om te zeggen OK, 1004 00:55:53,700 --> 00:55:56,930 dus ik zal beginnen met een vector Dat is een aanzienlijke waarde. 1005 00:55:56,930 --> 00:56:01,260 Bereken uit de volgende waarde dat gaat op mijn oplossing vector, 1006 00:56:01,260 --> 00:56:02,630 en voegt deze. 1007 00:56:02,630 --> 00:56:05,290 >> Iets anders te maken, voegt deze. 1008 00:56:05,290 --> 00:56:08,120 Het ging heel, heel langzaam. 1009 00:56:08,120 --> 00:56:11,540 En zodra ik dit besefte en ik veranderde mijn systeem 1010 00:56:11,540 --> 00:56:16,020 het toevoegen van deze vector als 10.000 tot 100.000 keer, 1011 00:56:16,020 --> 00:56:18,910 gewoon pre-toewijzing van een vector en gewoon lopen met dat. 1012 00:56:18,910 --> 00:56:22,100 Ik kreeg meer dan 1000-voudige snelheid. 1013 00:56:22,100 --> 00:56:26,280 Dus dit is een veel voorkomende val voor R programmering. 1014 00:56:26,280 --> 00:56:31,560 Als u nodig hebt om het opbouwen van een vector stuk voor stuk, pre-wijzen het. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> Een andere veel voorkomende trip up-- dit is mijn laatste glijbaan, niet worry-- is foutafhandeling. 1017 00:56:40,240 --> 00:56:42,890 R, om eerlijk te zijn, niet dit is echt zeer goed doen. 1018 00:56:42,890 --> 00:56:45,010 Er zijn veel problemen die kunnen opduiken. 1019 00:56:45,010 --> 00:56:48,360 Bijvoorbeeld, als je een array te krijgen of een vector uit van een functie 1020 00:56:48,360 --> 00:56:52,377 dat je verwacht een enkele werden waarde te komen uit, of vice versa, 1021 00:56:52,377 --> 00:56:55,460 en u die overgaan in een functie die Je schreef verwacht een enkele waarde, 1022 00:56:55,460 --> 00:56:57,270 dat een probleem kan zijn. 1023 00:56:57,270 --> 00:57:01,440 >> Bepaalde functies terug null net als, zeg, 1024 00:57:01,440 --> 00:57:05,560 lezen van een onbestaand sleutel in een lijst. 1025 00:57:05,560 --> 00:57:08,527 Null, maar is niet zoals C waar als je probeert te lezen 1026 00:57:08,527 --> 00:57:11,360 van een oude pointer, [onverstaanbaar] om null pointer, het is gewoon Seg fouten 1027 00:57:11,360 --> 00:57:14,109 en als je in je debugger is vertelt je precies waar je bent. 1028 00:57:14,109 --> 00:57:17,080 1029 00:57:17,080 --> 00:57:20,772 In plaats daarvan, null zal functies doen-- zal onvoorspelbare dingen doen 1030 00:57:20,772 --> 00:57:21,730 als ze overhandigd null. 1031 00:57:21,730 --> 00:57:24,575 Net als je overhandigd max null, het zal u negatief oneindig geven. 1032 00:57:24,575 --> 00:57:27,230 1033 00:57:27,230 --> 00:57:28,190 En zo, ja. 1034 00:57:28,190 --> 00:57:30,880 1035 00:57:30,880 --> 00:57:32,630 En dus dit gebeurde om me een keer toen ik 1036 00:57:32,630 --> 00:57:34,771 veranderde een stelletje velden in mijn lijst structuur 1037 00:57:34,771 --> 00:57:37,520 keer zonder elders te veranderen toen ik het lezen van hen. 1038 00:57:37,520 --> 00:57:40,670 En toen kreeg ik allerlei willekeurige oneindig resultaten opduiken 1039 00:57:40,670 --> 00:57:43,080 en ik geen idee waar ze vandaan kwamen. 1040 00:57:43,080 --> 00:57:45,310 En helaas, er is geen echte R strikte modus 1041 00:57:45,310 --> 00:57:48,940 waar je kunt zeggen als er iets het lijkt alsof het een vergissing zou zijn, 1042 00:57:48,940 --> 00:57:51,960 gewoon stoppen daar, dus ik kan gedisciplineerd en bevestig dat. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 Er is echter iets noemde stop als niet. 1045 00:57:57,240 --> 00:58:00,480 Dit is gelijk aan C's beweren, als je hebt gesproken over dat. 1046 00:58:00,480 --> 00:58:02,690 Ik denk niet dat C gelden is een lezing onderwerp, 1047 00:58:02,690 --> 00:58:06,370 maar uw sectie leider meer dan het zou zijn gegaan. 1048 00:58:06,370 --> 00:58:10,393 En stopt als er geen neemt eigenlijk elke predikaat, zodat een verklaring dat 1049 00:58:10,393 --> 00:58:11,824 kunnen waar of onwaar zijn. 1050 00:58:11,824 --> 00:58:13,490 En als het valse, stopt het programma. 1051 00:58:13,490 --> 00:58:18,260 Het vertelt je precies wat je line waren en wat conditie mislukt. 1052 00:58:18,260 --> 00:58:21,910 >> En dit nuttig, bijvoorbeeld, sanity controle, functie-ingangen. 1053 00:58:21,910 --> 00:58:25,110 Dus als je een functie en je verwacht, laten we zeggen, 1054 00:58:25,110 --> 00:58:29,640 Als je me een datum te geven, ik wil de data zijn slechts een vector van lengte 1 1055 00:58:29,640 --> 00:58:31,735 ergens tussen 1 en 31. 1056 00:58:31,735 --> 00:58:34,420 1057 00:58:34,420 --> 00:58:36,170 En zo niet, ik weet er is iets mis gegaan. 1058 00:58:36,170 --> 00:58:40,280 En ik kies om daar te stoppen voordat deze heeft willekeurige klop op effecten met code 1059 00:58:40,280 --> 00:58:44,190 dat het moeilijker om door te traceren. 1060 00:58:44,190 --> 00:58:47,170 Dus dat is een mogelijke gebruiken stop als niet. 1061 00:58:47,170 --> 00:58:48,660 >> Hoe dan ook, op OK. 1062 00:58:48,660 --> 00:58:49,690 Dus dat is het einde. 1063 00:58:49,690 --> 00:58:51,290 Heel erg bedankt voor uw komst. 1064 00:58:51,290 --> 00:58:53,710 Ik ben een rang amateur op dit. 1065 00:58:53,710 --> 00:58:57,270 Dus sorry als je je verveelt of verward of wat heb je. 1066 00:58:57,270 --> 00:59:01,670 Ik ben blij om vragen per e-mail te nemen bij connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Dit geldt ook voor iedereen het bekijken van deze live of later. 1068 00:59:07,230 --> 00:59:10,190 Ook al ben ik niet een TF, ik ben ook erg 1069 00:59:10,190 --> 00:59:13,900 bereid om te dienen als een onofficiële adviseur voor iedereen die 1070 00:59:13,900 --> 00:59:15,460 met R in een afstudeerproject. 1071 00:59:15,460 --> 00:59:19,900 >> Als u wilt dat, dan gewoon praten met uw TF 1072 00:59:19,900 --> 00:59:23,750 en dan schrijf me een e-mail zodat Ik weet wat je mee bezig bent 1073 00:59:23,750 --> 00:59:26,680 en zo kan ik opzetten vergadering keer met u als u wilt. 1074 00:59:26,680 --> 00:59:27,990 Dus nogmaals, ik dank u zeer. 1075 00:59:27,990 --> 00:59:28,960 Ik hoop dat je genoten. 1076 00:59:28,960 --> 00:59:29,450 >> PUBLIEK: [onverstaanbaar]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Natuurlijk. 1078 00:59:30,617 --> 00:59:34,910 >> Publiek: Wat voor een project zou CS student gebruiken R? 1079 00:59:34,910 --> 00:59:37,427 1080 00:59:37,427 --> 00:59:40,510 CONNER HARRIS: Dus als je niet doen iets dat louter in data mining, 1081 00:59:40,510 --> 00:59:43,790 bijvoorbeeld, en er zijn veel dingen 1082 00:59:43,790 --> 00:59:46,692 je zou kunnen doen met die met data mining en machine learning. 1083 00:59:46,692 --> 00:59:48,900 Je zou willen gebruiken voor R een onderdeel van iets. 1084 00:59:48,900 --> 00:59:52,022 Ik opgevoed, oorspronkelijk, het voorbeeld van als je het schrijven van een website 1085 00:59:52,022 --> 00:59:54,730 en u wilt automatisch draaien statistische analyse van uw server 1086 00:59:54,730 --> 00:59:57,990 logs op een bepaalde tijd elke dag, dat zou iets dat zijn 1087 00:59:57,990 --> 01:00:01,260 zeer gemakkelijk te doen in slechts een korte R script dat je kunt plannen 1088 01:00:01,260 --> 01:00:04,200 elke avond werking, bijvoorbeeld. 1089 01:00:04,200 --> 01:00:06,550 >> En ik weet zeker dat, als er enige reden waarom je zou 1090 01:00:06,550 --> 01:00:11,520 wil statistieken of grafische mogelijkheden en hebben deze run automatisch plaats 1091 01:00:11,520 --> 01:00:13,790 van te interageren met de dingen in Excel, 1092 01:00:13,790 --> 01:00:16,750 bijvoorbeeld, dat is iets wilt u misschien R gebruiken. 1093 01:00:16,750 --> 01:00:21,190 Dus vragen meer voor ik vertrek? 1094 01:00:21,190 --> 01:00:21,690 Nee? 1095 01:00:21,690 --> 01:00:24,960 Oké, goed, nogmaals, dank u hartelijk voor uw komst. 1096 01:00:24,960 --> 01:00:29,417