1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Men jag tror vissa spännande video 3 00:00:07,690 --> 00:00:12,570 produceras av en professionell rådgivning som använder R mycket i sitt arbete. 4 00:00:12,570 --> 00:00:16,329 >> BERÄTTARE: Vad ligger bakom statistiken, analytics, och visualiseringar 5 00:00:16,329 --> 00:00:19,770 att dagens smartaste uppgifter forskare och företagsledare lita på 6 00:00:19,770 --> 00:00:22,012 att göra kraftfulla beslut? 7 00:00:22,012 --> 00:00:23,540 Du kanske inte alltid ser det. 8 00:00:23,540 --> 00:00:24,790 Men det är där. 9 00:00:24,790 --> 00:00:29,460 Det kallas R, r-- öppen källa språk statistisk programmering 10 00:00:29,460 --> 00:00:32,630 att dataexperter världen över användning för allt 11 00:00:32,630 --> 00:00:35,350 från kartläggning bred social och marknadsföring trender på nätet 12 00:00:35,350 --> 00:00:39,210 att utveckla den ekonomiska och klimat modeller som hjälper driva våra ekonomier 13 00:00:39,210 --> 00:00:40,780 och samhällen. 14 00:00:40,780 --> 00:00:44,910 >> Men vad exakt är R och där gjorde R börja? 15 00:00:44,910 --> 00:00:48,620 Väl ursprungligen började R här med två professorer 16 00:00:48,620 --> 00:00:51,950 som ville ha en bättre statistisk plattform för sina elever. 17 00:00:51,950 --> 00:00:56,030 Så de skapade en modelleras efter statistikspråket S. 18 00:00:56,030 --> 00:01:00,480 De, tillsammans med många andra, fortsatte att arbeta på och med hjälp av R, 19 00:01:00,480 --> 00:01:05,489 skapa verktyg för R och hitta nya användningsområden för R varje dag. 20 00:01:05,489 --> 00:01:07,750 >> Tack vare detta är världsomspännande gemenskap ansträngning, 21 00:01:07,750 --> 00:01:11,850 R hålls växer med tusentals användarskapade bibliotek byggs 22 00:01:11,850 --> 00:01:15,500 att öka R-funktionalitet och tränger anskaffas kvalitet validering 23 00:01:15,500 --> 00:01:19,740 och stöd från de mest erkända branschledande inom varje område som 24 00:01:19,740 --> 00:01:25,040 använder R. Vilket är bra, eftersom R är bäst på vad den gör. 25 00:01:25,040 --> 00:01:28,540 Knoppande experter snabbt och enkelt tolka, interagera med, 26 00:01:28,540 --> 00:01:33,790 och visualisera data visar deras snabbt växande gemenskap av R användare världen över 27 00:01:33,790 --> 00:01:36,380 och se hur öppen källkod R fortsätter att forma 28 00:01:36,380 --> 00:01:39,340 framtiden för statistisk analys och data vetenskap. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, bra. 31 00:01:47,710 --> 00:01:50,360 Så min egen presentation kommer att vara lite mer nykter. 32 00:01:50,360 --> 00:01:54,380 Det kommer inte att innebära så mycket spännande bakgrundsmusik. 33 00:01:54,380 --> 00:01:59,160 Men som ni såg i videon, är R sort av ett syfte programspråks allmänhet. 34 00:01:59,160 --> 00:02:03,720 Men det skapades mestadels för statistiskt arbete. 35 00:02:03,720 --> 00:02:07,980 >> Så det är utformat för statistik, för dataanalys, för data mining. 36 00:02:07,980 --> 00:02:12,420 Och så du kan se detta i en hel del konstruktions val som skaparna av R 37 00:02:12,420 --> 00:02:13,320 gjord. 38 00:02:13,320 --> 00:02:15,472 Den är utformad för hög grad, personer som inte är 39 00:02:15,472 --> 00:02:17,930 experter inom programmering, som bara plocka upp programmering 40 00:02:17,930 --> 00:02:23,460 på sidan så att de kan utföra sitt arbete i samhällsvetenskap eller statistik 41 00:02:23,460 --> 00:02:25,440 eller vad som helst. 42 00:02:25,440 --> 00:02:27,850 >> Den har en hel del mycket viktiga skillnader från C. 43 00:02:27,850 --> 00:02:33,200 Men syntaxen och paradigm att den använder är i stort sett densamma. 44 00:02:33,200 --> 00:02:36,830 Och du ska känna dig ganska mycket hemma just off the bat. 45 00:02:36,830 --> 00:02:38,520 Det är ett viktigt språk. 46 00:02:38,520 --> 00:02:40,260 >> Oroa dig inte för mycket om det Om du inte känner till begreppet. 47 00:02:40,260 --> 00:02:42,676 Men det finns en skillnad mellan imperativ, deklarativ, 48 00:02:42,676 --> 00:02:43,810 och funktionella. 49 00:02:43,810 --> 00:02:47,600 Imperativ bara innebär att du gör uttalanden som i princip kommandon. 50 00:02:47,600 --> 00:02:52,340 Och sedan tolken eller dator följer dem en efter en. 51 00:02:52,340 --> 00:02:56,630 Det är svagt skrivit, finns inga typdeklarationer i R. 52 00:02:56,630 --> 00:02:59,130 >> Och sedan linjerna mellan olika typer 53 00:02:59,130 --> 00:03:03,920 är lite mer löst än de är i C, t ex. 54 00:03:03,920 --> 00:03:06,450 Och som jag sade att det finns mycket omfattande faciliteter 55 00:03:06,450 --> 00:03:15,610 för grafer, för statistisk analys, för data mining. 56 00:03:15,610 --> 00:03:19,540 Dessa är båda inbyggda i språk och, som video sa, 57 00:03:19,540 --> 00:03:23,680 tusentals bibliotek tredje part som du kan ladda ner och använda gratis 58 00:03:23,680 --> 00:03:25,340 med mycket lösa tillståndsvillkor. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Så i allmänhet, skulle jag rekommendera att du tittar på dessa två böcker 61 00:03:31,500 --> 00:03:34,610 om du kommer att arbeta med R. Ett av dem är officiella R nybörjare 62 00:03:34,610 --> 00:03:35,110 guide. 63 00:03:35,110 --> 00:03:38,660 Det upprätthålls av core utvecklare av R. 64 00:03:38,660 --> 00:03:42,400 Du kan ladda ner den igen, fri från ladda och lagligt på som länkar där. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Alla dessa bilderna kommer att gå upp på internet, på CS50 webbplats 67 00:03:49,869 --> 00:03:50,660 när det är gjort. 68 00:03:50,660 --> 00:03:53,690 Så ingen anledning att kopiera ner saker frenetiskt. 69 00:03:53,690 --> 00:03:56,800 >> Den andra är en lärobok av Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 som är en statistik professor vid Carnegie Mellon, som kallas Advanced Data 71 00:04:00,100 --> 00:04:02,160 Analys från en Elementär Point of View. 72 00:04:02,160 --> 00:04:04,010 Detta är inte i första hand en R bok. 73 00:04:04,010 --> 00:04:07,130 Det är en statistik bok och Det är en dataanalys bok. 74 00:04:07,130 --> 00:04:11,990 Men det är mycket tillgänglig för människor som har ett minimum av statistik kunskap. 75 00:04:11,990 --> 00:04:13,750 >> Jag har aldrig fattat ett formellt kurs. 76 00:04:13,750 --> 00:04:17,269 Jag vet bara bitar från olika allierade ämnen 77 00:04:17,269 --> 00:04:18,579 att jag har läst kurser i. 78 00:04:18,579 --> 00:04:21,839 Och jag kunde förstå det mycket väl. 79 00:04:21,839 --> 00:04:25,630 >> Alla siffror är givna i R. De är gjorda i R 80 00:04:25,630 --> 00:04:30,280 och de har också kodexempel under varje siffra som berätta 81 00:04:30,280 --> 00:04:33,270 hur du gör varje figur med R-kod. 82 00:04:33,270 --> 00:04:37,400 Och det är mycket användbart om du försöker efterlikna 83 00:04:37,400 --> 00:04:38,650 någon siffra du ser i en bok. 84 00:04:38,650 --> 00:04:47,840 >> Och återigen gratis nedladdning stat.cmu.edu/cshalizi/ Tyvärr, 85 00:04:47,840 --> 00:04:50,230 som bör slash tilde cshalizi. 86 00:04:50,230 --> 00:04:53,150 Jag ska se till att rätta till det när de officiella bilderna går upp. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV vilket är precis akronym för boktitel. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Så allmänt caveats-- R har en hel del funktioner. 90 00:05:02,500 --> 00:05:05,331 Jag kommer bara att kunna täcka ytan av en hel del saker. 91 00:05:05,331 --> 00:05:08,580 Även den första delen av seminariet kommer att bli något av ett data dumpning. 92 00:05:08,580 --> 00:05:11,437 Jag är ganska ledsen för det. 93 00:05:11,437 --> 00:05:13,770 I grund och botten, jag ska introducera dig till en massa saker 94 00:05:13,770 --> 00:05:15,350 just off the bat, gå så fort som möjligt. 95 00:05:15,350 --> 00:05:17,058 Och då får vi den roliga delen, som är 96 00:05:17,058 --> 00:05:20,570 demo där jag kan visa dig allt att vi har talat om på skärmen. 97 00:05:20,570 --> 00:05:23,321 Och du kan spela runt på egen hand. 98 00:05:23,321 --> 00:05:26,070 Så det kommer att bli en hel del tekniska saker kastas upp här. 99 00:05:26,070 --> 00:05:28,060 Oroa dig inte för att kopiera allt ner. 100 00:05:28,060 --> 00:05:31,740 Eftersom A, kan du få all grejer på CS50 hemsida senare. 101 00:05:31,740 --> 00:05:37,780 Och B, det är egentligen inte så viktigt att memorera detta från objektglasen. 102 00:05:37,780 --> 00:05:40,462 Det är viktigare att du får några intuitiv anläggning med det 103 00:05:40,462 --> 00:05:44,220 och som kommer från bara spela runt. 104 00:05:44,220 --> 00:05:45,720 >> Så varför använda R? 105 00:05:45,720 --> 00:05:49,440 I grund och botten, om du har ett projekt som innebär gruv stora datamängder, data 106 00:05:49,440 --> 00:05:52,664 visualisering, du bör använda R. Om du är 107 00:05:52,664 --> 00:05:55,830 gör komplicerade statistiska analyser, som skulle vara svårt att i Excel, 108 00:05:55,830 --> 00:05:58,010 till exempel, skulle det också good-- också 109 00:05:58,010 --> 00:06:00,506 Om du gör statistiska analys som är automatiserad. 110 00:06:00,506 --> 00:06:02,130 Låt oss säga att du underhålla en webbplats. 111 00:06:02,130 --> 00:06:06,320 Och du vill läsa serverloggen varje dag och sammanställa en del listan, 112 00:06:06,320 --> 00:06:10,320 som de bästa länderna att dina användare kommer ifrån, 113 00:06:10,320 --> 00:06:15,100 några sammanfattande statistik om hur lång tid de tillbringar på din webbplats eller vad som helst. 114 00:06:15,100 --> 00:06:16,910 Och du vill köra detta varje dag. 115 00:06:16,910 --> 00:06:20,280 >> Nu om du gör detta i Excel, du skulle behöva gå till din server log, 116 00:06:20,280 --> 00:06:23,490 importera det till en Excel-data kalkylblad, 117 00:06:23,490 --> 00:06:24,910 köra hela analysen manuellt. 118 00:06:24,910 --> 00:06:27,100 Med R, kan du bara skriva ett manus. 119 00:06:27,100 --> 00:06:29,520 Planera att köra varje dag från operativsystemet. 120 00:06:29,520 --> 00:06:33,657 Och sedan varje kväll på 2:00, eller när du planera att köra, 121 00:06:33,657 --> 00:06:35,990 det kommer att se igenom din Internet-trafik för den dagen. 122 00:06:35,990 --> 00:06:39,010 Och sedan nästa dag, kommer du har denna glänsande, ny rapport 123 00:06:39,010 --> 00:06:41,710 eller vad med alla information som du bett om. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Så i princip R är för Cisco programmering kontra Cisco analys. 126 00:06:50,217 --> 00:06:51,050 Preliminär görs. 127 00:06:51,050 --> 00:06:53,104 Låt oss komma in i verkliga saker. 128 00:06:53,104 --> 00:06:55,020 Så det finns tre riktiga typer i språket. 129 00:06:55,020 --> 00:06:56,120 Det finns numerisk typ. 130 00:06:56,120 --> 00:07:01,250 Det blir liksom en skillnad mellan heltal och flytande punkter, 131 00:07:01,250 --> 00:07:02,769 men inte riktigt. 132 00:07:02,769 --> 00:07:04,560 Det finns ett tecken typ, vilket är strängar. 133 00:07:04,560 --> 00:07:07,100 Och det finns en logisk typ, vilket är Booleans. 134 00:07:07,100 --> 00:07:11,080 >> Och du kan konvertera mellan olika typer användning av dessa funktioner som numeriska, 135 00:07:11,080 --> 00:07:15,220 karaktär, som logiskt. 136 00:07:15,220 --> 00:07:17,510 Om du ringer, till exempel, som numeriskt på ett snöre, 137 00:07:17,510 --> 00:07:20,030 det kommer att försöka läsa den strängen som ett tal, på samma sätt 138 00:07:20,030 --> 00:07:25,897 att A2I och scanf göra, och C. Om du ringer som numeriskt på sant eller falskt 139 00:07:25,897 --> 00:07:26,980 Det kommer att konvertera till 1 eller 0. 140 00:07:26,980 --> 00:07:29,110 Om du ringer som tecken på något det ska 141 00:07:29,110 --> 00:07:32,550 omvandla den till en strängrepresentation. 142 00:07:32,550 --> 00:07:34,990 >> Och sedan finns det vektorer och matriser. 143 00:07:34,990 --> 00:07:37,580 Så vektorer är i grunden 1 dimensionella arrayer. 144 00:07:37,580 --> 00:07:40,600 De är vad vi kallar arrayer i C. Matriser, 2 dimensionella arrayer. 145 00:07:40,600 --> 00:07:42,350 Och sedan högre dimensionella arrayer DU kan 146 00:07:42,350 --> 00:07:48,560 har 3, 4, 5 dimensioner eller vad av numeriska värden, strängar, 147 00:07:48,560 --> 00:07:52,860 av logiska värden. 148 00:07:52,860 --> 00:07:55,380 >> Du har också listor som är ett slags associativ array. 149 00:07:55,380 --> 00:07:57,390 Jag ska komma in i det lite. 150 00:07:57,390 --> 00:07:59,390 Så en viktig sak som snubblar människor i R 151 00:07:59,390 --> 00:08:01,470 är att det finns ingen verkligt, rena atomtyper. 152 00:08:01,470 --> 00:08:05,870 Det finns ingen verklig skillnad mellan ett nummer, som ett numeriskt värde, 153 00:08:05,870 --> 00:08:07,920 och en lista med numeriska värden. 154 00:08:07,920 --> 00:08:12,370 Numeriska värden är faktiskt samma som vektorer längd 1. 155 00:08:12,370 --> 00:08:14,959 Och detta har ett antal viktiga konsekvenser. 156 00:08:14,959 --> 00:08:17,500 En, betyder det att du kan göra saker mycket lätt som involverar 157 00:08:17,500 --> 00:08:21,037 som att lägga ett nummer till en vektor. 158 00:08:21,037 --> 00:08:23,120 R kommer i princip siffra reda på vad du menar med det. 159 00:08:23,120 --> 00:08:24,610 Och jag ska få till det på en sekund. 160 00:08:24,610 --> 00:08:27,930 Det innebär också att det finns inget sätt för den typ checker-- i den utsträckning 161 00:08:27,930 --> 00:08:30,530 att något sånt existerar i r-- att berätta 162 00:08:30,530 --> 00:08:33,780 när du har passerat på den inre värde när den förväntar sig en array eller vice versa. 163 00:08:33,780 --> 00:08:39,159 Och det kan orsaka vissa udda problem som jag sprang in när 164 00:08:39,159 --> 00:08:42,252 Jag använde R under min sommarjobb. 165 00:08:42,252 --> 00:08:43,710 Och det finns inga blandad typ arrayer. 166 00:08:43,710 --> 00:08:46,543 Så du kan inte ha en matris var första element, jag vet inte, 167 00:08:46,543 --> 00:08:49,332 strängen "John" och andra delen är nummer 42. 168 00:08:49,332 --> 00:08:52,540 Om du försöker göra det, då får du allt bara konverteras till en sträng. 169 00:08:52,540 --> 00:08:54,760 Så vi har sträng John, sträng 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Så ovanligt syntaktiskt features-- mest R syntax är mycket lik C. 172 00:09:02,025 --> 00:09:04,690 Det finns några viktiga skillnader. 173 00:09:04,690 --> 00:09:05,620 Inskrivning är mycket svag. 174 00:09:05,620 --> 00:09:07,360 Det finns alltså inga variabeldeklarationer. 175 00:09:07,360 --> 00:09:12,670 Uppdrag använder den märkliga fel operatör mindre än bindestreck. 176 00:09:12,670 --> 00:09:15,340 Kommentarer är med hash varumärket. 177 00:09:15,340 --> 00:09:19,230 Jag antar att nu dagar vi kallar det hashtag men det är inte riktigt accurate-- inte 178 00:09:19,230 --> 00:09:21,810 den dubbla snedstreck. 179 00:09:21,810 --> 00:09:24,710 >> Modulära rester är med %% tecken. 180 00:09:24,710 --> 00:09:30,172 Heltalsdivision är med% /% vilket är mycket svårt att läsa när det projiceras 181 00:09:30,172 --> 00:09:30,880 upp på skärmen. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 Du kan få serier av heltal med kolon. 184 00:09:37,200 --> 00:09:41,840 Så 2,5 kommer att ge dig en vektor av alla nummer 2 genom 5. 185 00:09:41,840 --> 00:09:44,530 >> Arrayer är en index, vilka skruvar en massa människor 186 00:09:44,530 --> 00:09:47,540 upp om de är från mer typiska programmeringsspråk, 187 00:09:47,540 --> 00:09:50,450 som C, där de flesta saker är noll-indexerade. 188 00:09:50,450 --> 00:09:54,420 Återigen, det är där R arv som ett språk för som inte 189 00:09:54,420 --> 00:09:56,560 professionella programmerare kommer in. 190 00:09:56,560 --> 00:09:59,680 Om du är en sociolog eller en ekonom eller något 191 00:09:59,680 --> 00:10:01,980 och du försöker använda R i princip som ett komplement 192 00:10:01,980 --> 00:10:03,832 till viktigare professionella arbete, 193 00:10:03,832 --> 00:10:06,040 du kommer att hitta en-indexera lite mer naturligt. 194 00:10:06,040 --> 00:10:09,890 Eftersom du börja räkna på en i vardagen, inte 0. 195 00:10:09,890 --> 00:10:13,260 >> För-loopar, är detta liknar den foreach konstruktionen i PHP, 196 00:10:13,260 --> 00:10:17,090 som du får lära in-- ganska snart. 197 00:10:17,090 --> 00:10:22,540 Vilket är för värde i vektor och då kan du göra saker med värde. 198 00:10:22,540 --> 00:10:24,040 PUBLIK: Det har kommit upp i föreläsning. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Åh, det är komma upp föreläsning, utmärkt. 200 00:10:26,248 --> 00:10:29,815 PUBLIK: Uppdraget, är det ska peka från höger till vänster? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: Från höger till vänster, ja. 202 00:10:31,440 --> 00:10:34,720 Du kan tänka på det som värdet på höger stowed i variabeln 203 00:10:34,720 --> 00:10:36,240 till vänster. 204 00:10:36,240 --> 00:10:36,781 PUBLIK: OK. 205 00:10:36,781 --> 00:10:39,770 206 00:10:39,770 --> 00:10:42,330 >> CONNOR HARRIS: Och slutligen Funktionen Syntaxen är lite konstigt. 207 00:10:42,330 --> 00:10:48,460 Du har funktionsnamnet foo, tilldelas där det ordet funktion, följt 208 00:10:48,460 --> 00:10:51,530 av alla argument och sedan kropp av funktionen efter det. 209 00:10:51,530 --> 00:10:53,280 Återigen dessa saker får verkar lite konstigt. 210 00:10:53,280 --> 00:10:57,181 De kommer att bli en andra natur efter du arbetar med språket för lite. 211 00:10:57,181 --> 00:10:58,930 Så vektorer, vägen du konstruera en vektor 212 00:10:58,930 --> 00:11:04,550 är du typ C, som är ett nyckelord, då alla nummer du vill eller strängar 213 00:11:04,550 --> 00:11:06,490 eller vad som helst. 214 00:11:06,490 --> 00:11:07,995 Argument också vara vektorer. 215 00:11:07,995 --> 00:11:09,620 Men den resulterande arrayen blir tillplattad. 216 00:11:09,620 --> 00:11:14,385 Så du kan inte ha arrayer där vissa delar är enstaka nummer 217 00:11:14,385 --> 00:11:17,010 och vissa delar är arrayer själva. 218 00:11:17,010 --> 00:11:20,010 >> Så om du försöker att bygga en array var det första elementet är 4 219 00:11:20,010 --> 00:11:22,370 och det andra elementet är arrayen 3,5 du 220 00:11:22,370 --> 00:11:25,890 bara få en tre element array, 4,3,5. 221 00:11:25,890 --> 00:11:27,760 De kan inte vara av blandad typ. 222 00:11:27,760 --> 00:11:32,290 Om du försöker läsa eller skriva utanför gränserna för en vektor 223 00:11:32,290 --> 00:11:36,640 du får detta värde kallas NA a som står för ett saknat värde. 224 00:11:36,640 --> 00:11:39,900 Och detta är avsett för liknande statistiker som 225 00:11:39,900 --> 00:11:43,080 arbetar med ofullständiga datamängder. 226 00:11:43,080 --> 00:11:46,460 >> Om du använder en funktion som är tänkt ta bara ett nummer till en matris 227 00:11:46,460 --> 00:11:49,220 vad du får är den Funktionen karta över gruppen. 228 00:11:49,220 --> 00:11:52,130 Så om din funktion låt oss säga tar ett nummer och returnerar den fyrkantiga. 229 00:11:52,130 --> 00:11:58,170 Du ansöker det till gruppen 2,3,5 Vad du får är arrayen 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> Och det är mycket användbar eftersom det innebär att du 231 00:12:00,010 --> 00:12:03,374 behöver inte skriva för öglor för gör mycket enkla saker som att tillämpa 232 00:12:03,374 --> 00:12:05,040 en funktion till alla medlemmar i en datamängd. 233 00:12:05,040 --> 00:12:08,557 Som om du arbetar med stora datamängder, måste du göra en hel del. 234 00:12:08,557 --> 00:12:10,390 Binära funktioner är tillämpad posten genom posten. 235 00:12:10,390 --> 00:12:12,430 Jag ska få in det. 236 00:12:12,430 --> 00:12:16,750 Du kan komma åt dem med arrayer eller vektorer med hakparenteser. 237 00:12:16,750 --> 00:12:22,300 Så vektor namn hakparenteser 1 kommer att ge dig det första elementet. 238 00:12:22,300 --> 00:12:25,510 Vektor namn hakparenteser 2 kommer att ge dig det andra elementet. 239 00:12:25,510 --> 00:12:27,530 >> Du kan vidarebefordra en vektor av index och du kommer 240 00:12:27,530 --> 00:12:29,640 komma tillbaka ut i grunden en sub faktor. 241 00:12:29,640 --> 00:12:34,990 Så du kan göra vektor namn fästen C, 2,4 och du får en vektor innehållande 242 00:12:34,990 --> 00:12:38,804 den andra och den fjärde uppsättningens element. 243 00:12:38,804 --> 00:12:40,720 Och om du bara vill ha en snabb sammanfattning statistik 244 00:12:40,720 --> 00:12:47,529 av en vektor som interquartile intervall, median, max, vad som helst, 245 00:12:47,529 --> 00:12:49,820 Du kan bara skriva sammandrag vektor namn och få ut det. 246 00:12:49,820 --> 00:12:52,680 Det är inte riktigt användbar i programmering men om du spelar 247 00:12:52,680 --> 00:12:55,990 runt datamängder, är det praktiskt. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- princip högre dimensionella arrayer. 249 00:12:58,650 --> 00:13:01,190 De har denna speciella notation syntax. 250 00:13:01,190 --> 00:13:07,620 Matrix med en array som får fylld in-- ledsen, matris med data, 251 00:13:07,620 --> 00:13:09,780 antal rader, antal kolumner. 252 00:13:09,780 --> 00:13:13,180 När du har några uppgifter, fyller i uppsättningen i princip går uppifrån och ned 253 00:13:13,180 --> 00:13:13,380 först. 254 00:13:13,380 --> 00:13:14,190 Därefter vänster till höger. 255 00:13:14,190 --> 00:13:15,030 Så, så. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 Och R har inbyggd matrismultiplikationer, 258 00:13:19,600 --> 00:13:24,310 spektral nedbrytning, diagonalisering, en hel del saker. 259 00:13:24,310 --> 00:13:27,785 Om du vill ha högre dimensionell arrayer, så 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 eller vad dimensioner kan du göra det. 261 00:13:29,410 --> 00:13:34,400 Syntaxen är array dim lika c, då listan över dimensionerna. 262 00:13:34,400 --> 00:13:38,620 Så om du vill ha en 4 dimensionell array med måtten 4, 7, 8, 9, arrayen, 263 00:13:38,620 --> 00:13:45,470 dim lika c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> Du kommer åt enskilda värden med konsoler första posten kommatecken andra posten. 265 00:13:51,180 --> 00:13:54,870 Du kan få hela skivor rader eller kolumner. 266 00:13:54,870 --> 00:13:59,900 Med denna ofullständiga syntaxen är det bara rad nummer kommatecken eller komma kolumnen 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å listor är ett slags associerad array. 270 00:14:04,540 --> 00:14:06,360 De har sin egen syntax här. 271 00:14:06,360 --> 00:14:08,320 Återigen inte frenetiskt kopiera allt detta ner. 272 00:14:08,320 --> 00:14:11,370 Detta är bara så att folk gå igenom bilderna senare 273 00:14:11,370 --> 00:14:13,089 har allt detta i en trevlig referens. 274 00:14:13,089 --> 00:14:16,130 Och detta kommer att bli mycket naturlig gång Jag faktiskt gå igenom demos. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Så visar en princip associerade matriser. 277 00:14:20,920 --> 00:14:27,040 Du kan komma åt värden med listnamn, dollartecken, nyckel. 278 00:14:27,040 --> 00:14:31,370 Så om din lista heter foo, då kan du få tillgång till det så. 279 00:14:31,370 --> 00:14:37,032 Du kan få en hel nyckel-värde-par genom att passera på torget fästet index. 280 00:14:37,032 --> 00:14:39,240 Om du läser från en obefintlig nyckel, får du null. 281 00:14:39,240 --> 00:14:41,150 Det kommer inte att fel. 282 00:14:41,150 --> 00:14:43,590 Saken är R kommer att göra som mycket med null som möjligt. 283 00:14:43,590 --> 00:14:46,580 Och detta kan innebära att om du är inte förväntar sig att få null ut 284 00:14:46,580 --> 00:14:51,840 vissa listan läsa, får du del oförutsägbara fel längre ner 285 00:14:51,840 --> 00:14:52,620 linjen. 286 00:14:52,620 --> 00:14:54,890 >> Detta hände mig min sommarjobb när jag använde R 287 00:14:54,890 --> 00:14:58,410 där jag förändrat hur en viss Listan definierades på ett ställe 288 00:14:58,410 --> 00:15:05,410 men inte ändra senare på kod som läser värden från det. 289 00:15:05,410 --> 00:15:10,190 Och så det som hände var att jag var läsning null-värden av denna lista, 290 00:15:10,190 --> 00:15:13,090 passerar dem i funktioner, och är mycket förvirrad 291 00:15:13,090 --> 00:15:16,000 när jag fick alla sorters slumpmässiga oändlig dyka upp 292 00:15:16,000 --> 00:15:16,790 i denna funktion. 293 00:15:16,790 --> 00:15:20,730 För om du använder viss maximal eller minimi funktioner null, 294 00:15:20,730 --> 00:15:22,570 du får oändliga värden ut. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Dataramar, de är en underklass av listan. 297 00:15:29,180 --> 00:15:31,170 Varje värde är en vektor av samma längd. 298 00:15:31,170 --> 00:15:34,220 Och de är vana för att presentera, i grund och botten, datatabeller. 299 00:15:34,220 --> 00:15:36,175 Det är det här initiering syntax. 300 00:15:36,175 --> 00:15:38,800 Detta kommer alla, återigen, vara mycket tydligare när du kommer till demon. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 Och det fina dataramar är att du 303 00:15:44,240 --> 00:15:49,380 kan ge namn åt alla kolumner och namnen på alla rader. 304 00:15:49,380 --> 00:15:53,890 Och så det gör åtkomst dem lite vänligare. 305 00:15:53,890 --> 00:15:59,130 Även detta är hur de flesta funktioner som läses data från Excel 306 00:15:59,130 --> 00:16:03,820 eller från textfiler, t.ex. kommer att läsa i sina data. 307 00:16:03,820 --> 00:16:07,555 De kommer att sätta den i någon form av dataramen. 308 00:16:07,555 --> 00:16:09,680 Så functions-- funktionerna Syntaxen är lite konstigt. 309 00:16:09,680 --> 00:16:16,160 Återigen är det namnet på funktionen, tilldela, detta sökord funktion och sedan 310 00:16:16,160 --> 00:16:17,900 listan över argument. 311 00:16:17,900 --> 00:16:24,080 Så det finns några trevliga saker om hur funktioner fungerar här. 312 00:16:24,080 --> 00:16:28,170 För en, kan du faktiskt tilldela standardvärden till vissa argument. 313 00:16:28,170 --> 00:16:32,910 Så du kan säga R1 equals-- du kan säga foo 314 00:16:32,910 --> 00:16:38,290 är en funktion där R1 är lika något som standard om användaren anger 315 00:16:38,290 --> 00:16:39,090 inga argument. 316 00:16:39,090 --> 00:16:41,932 Annars är det vad han satte in. 317 00:16:41,932 --> 00:16:44,140 Och det är mycket praktiskt eftersom en hel del av våra funktioner 318 00:16:44,140 --> 00:16:47,910 har ofta tiotals eller hundratals argument. 319 00:16:47,910 --> 00:16:51,210 Till exempel de för att rita diagram eller konspirera scatter tomter 320 00:16:51,210 --> 00:16:54,430 har argument som styr allt från titeln och axeln 321 00:16:54,430 --> 00:16:59,512 etiketter på färgen på regressionslinjerna. 322 00:16:59,512 --> 00:17:01,470 Och så om du inte vill att få folk att specificera 323 00:17:01,470 --> 00:17:04,050 varenda en av dessa hundratals argument 324 00:17:04,050 --> 00:17:07,674 styra varje enskild aspekt av en tomt eller en regression eller vad som helst, 325 00:17:07,674 --> 00:17:09,299 det är trevligt att ha dessa standardvärden. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> Och sedan kan du faktiskt skriva så du såg tillbaka hit. 328 00:17:19,146 --> 00:17:22,869 Eller hitta ett bättre exempel. 329 00:17:22,869 --> 00:17:28,690 När du ringer funktioner som du kan faktiskt kalla dem med hjälp av argumentnamn. 330 00:17:28,690 --> 00:17:33,919 Så här är ett exempel på matris konstruktören. 331 00:17:33,919 --> 00:17:34,960 Det tar tre argument. 332 00:17:34,960 --> 00:17:36,760 Vanligtvis du har data, vilket är en vektor. 333 00:17:36,760 --> 00:17:38,920 Du har N rad, vilket är antalet rader. 334 00:17:38,920 --> 00:17:41,160 Du har N cols-- antal kolumner. 335 00:17:41,160 --> 00:17:43,920 Saken är om du skriver N raden är lika oavsett 336 00:17:43,920 --> 00:17:46,520 och N col lika oavsett när du ringer denna funktion 337 00:17:46,520 --> 00:17:47,770 du kan faktiskt vända dem. 338 00:17:47,770 --> 00:17:51,590 Så du kan sätta N col först och N raden andra och det kommer att göra någon skillnad. 339 00:17:51,590 --> 00:17:54,660 Så det är en trevlig liten funktion. 340 00:17:54,660 --> 00:17:56,260 >> Gjorde import och export. 341 00:17:56,260 --> 00:18:00,010 Detta kan göras, i princip. 342 00:18:00,010 --> 00:18:03,816 Det finns också möjligheter att skriva ut godtycklig R invänder mot en binär fil 343 00:18:03,816 --> 00:18:05,190 och sedan läsa dem igen senare. 344 00:18:05,190 --> 00:18:08,030 Vilket är praktiskt om du gör en stor interaktiv session R 345 00:18:08,030 --> 00:18:12,850 och du måste spara saker mycket snabbt. 346 00:18:12,850 --> 00:18:16,460 Som standard R har en arbetskatalog att filer får skrivas ut i 347 00:18:16,460 --> 00:18:19,410 och läsa tillbaka från. 348 00:18:19,410 --> 00:18:22,350 Du kan se att med getwg, ändra det med setdw. 349 00:18:22,350 --> 00:18:25,630 Inget särskilt intressant här 350 00:18:25,630 --> 00:18:28,270 >> Så nu är det faktiska statistiken stuff-- multilinjär regression. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Så den vanliga syntaxen är lite komplicerat. 353 00:18:34,910 --> 00:18:37,260 Modellen är ett stort objekt i grund och botten. 354 00:18:37,260 --> 00:18:39,910 Det blir tilldelad lm, vilket är ett funktionsanrop. 355 00:18:39,910 --> 00:18:43,840 Det första elementet, y tilde x1 plus vad som helst. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 Min syntax här är lite förvirrande. 358 00:18:47,990 --> 00:18:49,490 Jag är ganska ledsen, detta är det vanliga sättet 359 00:18:49,490 --> 00:18:50,990 att datavetenskap böcker gör detta. 360 00:18:50,990 --> 00:18:54,890 Men det är lite konstigt. 361 00:18:54,890 --> 00:18:58,200 >> Så i princip är det lm parentes, första punkten 362 00:18:58,200 --> 00:19:06,730 är variable-- ledsen, beroende variabel tilde x1 plus x2 plus 363 00:19:06,730 --> 00:19:10,910 men många oberoende variabler som du har. 364 00:19:10,910 --> 00:19:14,240 Och då dessa kan antingen vara vektorer, alla samma längd. 365 00:19:14,240 --> 00:19:16,220 Eller de kan vara kolonn rubriker i en dataram 366 00:19:16,220 --> 00:19:18,553 att du bara anger i andra argumentet dataram. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> Du kan även ange en mer komplicerad formel 369 00:19:26,380 --> 00:19:31,990 så du behöver inte linjärt regrediera en beroende variabel, 370 00:19:31,990 --> 00:19:34,440 eller en vektor på en befintlig vektor. 371 00:19:34,440 --> 00:19:38,070 Du kan göra, till exempel en vektorkomponent y kvadrat plus 1 372 00:19:38,070 --> 00:19:42,100 och tillbakagång som mot logga någon annan vektor. 373 00:19:42,100 --> 00:19:45,200 Du kan skriva ut sammanfattningar av modell med det här kommandot kallas 374 00:19:45,200 --> 00:19:48,607 summary-- bara sammanfattningen Parens modell. 375 00:19:48,607 --> 00:19:50,190 Igen något annat jag bör klargöra. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Något annat som kommer att få rättas när bilderna går upp på internet. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Om du bara vill beräkna en enkel korrelation 380 00:20:03,210 --> 00:20:09,170 du kan använda korrelationsvektor En vektor 2 funktion kärna. 381 00:20:09,170 --> 00:20:11,856 Metoden är som standard Pearson korrelationer. 382 00:20:11,856 --> 00:20:13,480 De är de vanliga du kan göra. 383 00:20:13,480 --> 00:20:15,990 Det finns också Spearman och Kendell korrelationer 384 00:20:15,990 --> 00:20:19,530 vilka är några olika rangordningskorrelation. 385 00:20:19,530 --> 00:20:23,600 Väl de inte beräkna produkten stunder mellan vektorerna själva, 386 00:20:23,600 --> 00:20:28,511 men av vektor rang order. 387 00:20:28,511 --> 00:20:29,510 Jag ska förklara det senare. 388 00:20:29,510 --> 00:20:30,120 >> PUBLIK: Snabb fråga 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Säker. 390 00:20:30,360 --> 00:20:33,151 >> PUBLIK: Så när du beräknar för enkla korrelationer göra 391 00:20:33,151 --> 00:20:37,655 du antar att det finns ett statistiskt betydelse för sambandet? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Du behöver inte. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 En lm är i princip bara en maskin. 395 00:20:43,960 --> 00:20:47,690 Det kommer att ta i två saker och det kommer att spotta ut 396 00:20:47,690 --> 00:20:49,770 koefficienter för bästa passform linjen. 397 00:20:49,770 --> 00:20:52,310 Den rapporterar också standard fel på dessa koefficienter. 398 00:20:52,310 --> 00:20:55,865 Och det kommer att berätta, som är den avlyssna statistiskt signifikant 399 00:20:55,865 --> 00:20:56,740 eller skillnad från 0. 400 00:20:56,740 --> 00:20:59,400 Är lutningen på det bästa anpassade linjen statist 401 00:20:59,400 --> 00:21:01,510 skild från noll, och så vidare. 402 00:21:01,510 --> 00:21:06,260 Så det förutsätter ingenting, tror jag är bästa svaret på din fråga. 403 00:21:06,260 --> 00:21:07,410 OK. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- så den främsta anledningen bör du Använd R, som multilinjär regression. 405 00:21:14,650 --> 00:21:17,320 I grund och botten alla språk har någon möjlighet för det. 406 00:21:17,320 --> 00:21:21,365 Och ärligt R syntax för regressions är lite svårbegripliga. 407 00:21:21,365 --> 00:21:22,990 Men plottning är där det verkligen skiner. 408 00:21:22,990 --> 00:21:28,090 >> Arbetshästen Funktionen är tomt och det tar två vektorer, x och y. 409 00:21:28,090 --> 00:21:33,010 Och sedan ellipser står för en mycket stort antal valfria argument som 410 00:21:33,010 --> 00:21:39,190 styra allt från titlar på färger av olika linjer eller olika punkter, 411 00:21:39,190 --> 00:21:40,200 den typ av tomten. 412 00:21:40,200 --> 00:21:42,250 Du kan ha scatter tomter eller linjediagram. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [OHÖRBAR] 2-vektorer av samma längd. 415 00:21:49,710 --> 00:21:53,780 Du kan föregå detta med bifoga dataram i ditt manus. 416 00:21:53,780 --> 00:22:01,220 Och detta kommer att låta du bara använder kolumnen rubriker i stället för separata vektorer. 417 00:22:01,220 --> 00:22:05,410 Du kan lägga till bästa passform linjer och lokal regressionskurvor till diagrammet. 418 00:22:05,410 --> 00:22:09,390 >> Dessa kommandon listade Här ab line och linjer, 419 00:22:09,390 --> 00:22:11,640 som standard dessa får skrivs in i pop-up fönster 420 00:22:11,640 --> 00:22:15,560 eftersom det förutsätter att du använder R interaktivt. 421 00:22:15,560 --> 00:22:17,310 Om du inte du kan skriva två filer som 422 00:22:17,310 --> 00:22:21,600 är verkligen alla format du vill. 423 00:22:21,600 --> 00:22:25,410 Tyvärr, jag har ett stavfel jag bara insåg. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Om du vill öppna annan grafisk enhet 426 00:22:32,720 --> 00:22:39,200 Du kan använda den här funktionen kallas PNG eller JPEG eller en massa andra bildformat. 427 00:22:39,200 --> 00:22:42,319 Och du kan skriva grafer till oavsett filnamn du anger. 428 00:22:42,319 --> 00:22:45,110 Om du vill avbryta att du måste use-- Jag skrev inte detta i slide-- 429 00:22:45,110 --> 00:22:49,650 men det finns en funktion som kallas dev dot utanför som tar inga argument. 430 00:22:49,650 --> 00:22:51,517 >> Sedan finns det anläggningar för 3D plottning 431 00:22:51,517 --> 00:22:53,350 och kontur rita Om du vill göra 432 00:22:53,350 --> 00:22:55,700 grafer av två oberoende variabler. 433 00:22:55,700 --> 00:22:57,150 Jag kommer inte att komma in i dessa just nu. 434 00:22:57,150 --> 00:22:59,130 >> Det finns också några faciliteter för animering 435 00:22:59,130 --> 00:23:01,300 de är vanligtvis underhålls av tredje part. 436 00:23:01,300 --> 00:23:06,330 Jag har gjort animationer med R grafer, men jag har inte använt dessa tredje part 437 00:23:06,330 --> 00:23:06,940 bibliotek. 438 00:23:06,940 --> 00:23:09,929 Så jag kan inte riktigt intyga hur bra de är. 439 00:23:09,929 --> 00:23:12,220 Vad jag rekommendera om du vill att göra animeringar med hjälp av R 440 00:23:12,220 --> 00:23:16,480 är att du kan skriva ut alla ramarna för animationer 441 00:23:16,480 --> 00:23:18,470 och sedan kan du använda en tredje part program-- 442 00:23:18,470 --> 00:23:23,630 typiska sådana kallas FFmpeg eller ImageMagick-- att sy 443 00:23:23,630 --> 00:23:26,540 alla dina bilder till en animation. 444 00:23:26,540 --> 00:23:28,380 >> Så tid för demo. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Så om du använder någon Unix liknande system som är Linux BSD, men som använder BSD. 447 00:23:37,189 --> 00:23:39,730 OS X öppnar ett terminalfönster och typ R vid kommandotolken. 448 00:23:39,730 --> 00:23:42,820 Om du har R studio eller liknande, som också fungerar. 449 00:23:42,820 --> 00:23:46,270 För Windows-användare bör du vara kunna hitta R i Start-menyn. 450 00:23:46,270 --> 00:23:50,390 Det bör kallas något som R x64 tre poäng oavsett. 451 00:23:50,390 --> 00:23:53,110 Öppna upp det där. 452 00:23:53,110 --> 00:23:58,850 >> Så låt mig nu bara Öppna ett terminalfönster. 453 00:23:58,850 --> 00:24:02,562 Okej, sök. 454 00:24:02,562 --> 00:24:03,520 PUBLIK: kommando-mellanslag 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Command-Space, tack. 456 00:24:06,675 --> 00:24:10,030 Jag inte normalt använder Mac. 457 00:24:10,030 --> 00:24:13,310 Terminal visar nytt fönster. 458 00:24:13,310 --> 00:24:18,120 New window är inställningar grundläggande, R. så ska du få 459 00:24:18,120 --> 00:24:22,230 ett välkomstmeddelande, ungefär så här. 460 00:24:22,230 --> 00:24:31,060 >> Så jag använder R interaktivt. 461 00:24:31,060 --> 00:24:32,719 Du kan också skriva R manus naturligtvis. 462 00:24:32,719 --> 00:24:34,510 I grund och botten skript körs på exakt samma sätt som 463 00:24:34,510 --> 00:24:40,250 om du satt vid datorn skriver i varje rad en i taget. 464 00:24:40,250 --> 00:24:42,660 Så låt oss börja med att göra 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, visst. 468 00:24:50,050 --> 00:24:51,630 Jag kan göra teckenstorleken större. 469 00:24:51,630 --> 00:24:53,030 >> PUBLIK: 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 Okej, hur är det? 474 00:25:00,370 --> 00:25:00,870 Bra? 475 00:25:00,870 --> 00:25:01,551 OK. 476 00:25:01,551 --> 00:25:03,300 Så låt oss börja med förklara en vektorlista. 477 00:25:03,300 --> 00:25:08,710 Gör en, pil, C 1,2,4. 478 00:25:08,710 --> 00:25:11,181 Vi kan se en. 479 00:25:11,181 --> 00:25:12,680 Oroa dig inte fästet där. 480 00:25:12,680 --> 00:25:18,590 Konsolerna är så om du skriver ut mycket långa arrayer, vi kan var du befinner dig. 481 00:25:18,590 --> 00:25:26,987 Ett exempel skulle vara om jag vill bara intervallet 2-200. 482 00:25:26,987 --> 00:25:28,820 Om jag tryckt en mycket långa array, konsolerna 483 00:25:28,820 --> 00:25:31,060 bara så jag kan hålla reda på vilket index 484 00:25:31,060 --> 00:25:33,250 vi är på om jag ser genom denna visuellt. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Så hur som helst, vi har en. 487 00:25:38,280 --> 00:25:43,326 >> Så jag sa innan att arrayer samverkar mycket snyggt med, till exempel, 488 00:25:43,326 --> 00:25:44,450 unära operationer som denna. 489 00:25:44,450 --> 00:25:46,500 Så vad du tycker jag ska få om jag skriver ett plus ett? 490 00:25:46,500 --> 00:25:49,630 491 00:25:49,630 --> 00:25:51,140 Japp. 492 00:25:51,140 --> 00:25:54,250 Rätt, nu ska jag göra denna annorlunda array. 493 00:25:54,250 --> 00:26:01,650 Låt oss säga b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Så vad tycker du detta kommando kommer att göra? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Lägg elementen. 497 00:26:10,670 --> 00:26:14,950 Och så i princip det är vad det gör. 498 00:26:14,950 --> 00:26:16,740 Så det här är ganska bekvämt. 499 00:26:16,740 --> 00:26:23,800 Så jag hur jag gör detta. c är, låt oss säga, 6 gånger 1-10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Så vad gör jag vill se innehöll tror du? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Så alla multiplar av sex. 504 00:26:38,110 --> 00:26:42,170 Nu, vad tror du kommer att hända om jag gör det? 505 00:26:42,170 --> 00:26:48,090 Jag ska göra detta lite tydligare, c, c. 506 00:26:48,090 --> 00:26:50,365 Så vad händer, gör du tror, ​​om jag gör det? 507 00:26:50,365 --> 00:26:51,488 a plus c. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [OHÖRBAR] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> PUBLIK: Antingen ett fel eller det bara lägger de första tre delarna. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Inte riktigt. 513 00:27:04,510 --> 00:27:05,522 Detta är vad vi fick. 514 00:27:05,522 --> 00:27:08,910 Vad som händer är en kortare array, en, fick cyklade. 515 00:27:08,910 --> 00:27:13,990 Så vi fick 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Ja. 517 00:27:15,710 --> 00:27:18,940 Och i princip kan du visa detta beteende innan, ett plus ett, 518 00:27:18,940 --> 00:27:22,190 som en underklass av detta beteende, där den kortaste arrayen är bara antalet 519 00:27:22,190 --> 00:27:25,410 1, som är en en elementgrupp. 520 00:27:25,410 --> 00:27:27,740 Jag vara bara säga vektor alla tiden i stället för matris, 521 00:27:27,740 --> 00:27:30,290 eftersom det är vad r dokumentation brukar. 522 00:27:30,290 --> 00:27:33,070 Det är en ingrodd c vana. 523 00:27:33,070 --> 00:27:37,590 >> OK, så nu har vi denna uppsättning. 524 00:27:37,590 --> 00:27:38,830 Så vi har denna array, c. 525 00:27:38,830 --> 00:27:41,380 Vi kan få sammandrag statistik om c, sammanfattande c. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 Och det är trevligt. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Så nu ska vi göra några matris saker. 530 00:27:52,670 --> 00:27:56,160 Låt oss säga att m är en matris. 531 00:27:56,160 --> 00:27:57,780 Låt oss göra det till en tre och tre en. 532 00:27:57,780 --> 00:28:01,630 Så nrows lika med 3, och ncols lika med 3. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 Och för data låt oss do-- så vad tror du kommer att göra? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> Höger, det är nästa. 537 00:28:16,580 --> 00:28:17,970 Det är nrow och ncolumn. 538 00:28:17,970 --> 00:28:22,164 539 00:28:22,164 --> 00:28:24,580 Så vad jag har gjort är att jag har förklarade en tre gånger tre matris 540 00:28:24,580 --> 00:28:26,950 och jag har klarat i en nio-elementgrupp. 541 00:28:26,950 --> 00:28:30,530 Så logaritmen av alla element en till nio. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 Och alla dessa värden fylla upp array-- ledsen? 544 00:28:37,285 --> 00:28:38,660 PUBLIK: De är bas 10 stockar? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: Nej, log naturliga logaritmer, så basen e. 546 00:28:41,284 --> 00:28:44,886 547 00:28:44,886 --> 00:28:47,010 Ja, om du ville bas 10 log, jag tror att du skulle ha 548 00:28:47,010 --> 00:28:51,620 logga vad som helst, dividerat med log 10. 549 00:28:51,620 --> 00:28:56,750 Och så uppgifterna i nätverket [OHÖRBAR] bara fyller upp arrayen, så uppifrån och ned, 550 00:28:56,750 --> 00:28:59,490 sedan från vänster till höger. 551 00:28:59,490 --> 00:29:06,890 Och om du ville göra något annat array, låt oss säga n är matris. 552 00:29:06,890 --> 00:29:10,317 Låt oss göra, jag vet inte, 2-13. 553 00:29:10,317 --> 00:29:11,900 Eller jag ska göra något mer intressant. 554 00:29:11,900 --> 00:29:13,770 Jag gör 2-4. 555 00:29:13,770 --> 00:29:15,780 nrow är lika, låt oss säga, 3. 556 00:29:15,780 --> 00:29:18,992 Ncol är lika 4. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Så vi har fått det här. 559 00:29:22,090 --> 00:29:26,130 >> Och nu om vi vill multiplicera dessa, vi skulle göra n procent tider procent, 560 00:29:26,130 --> 00:29:27,680 eftersom det är n. 561 00:29:27,680 --> 00:29:30,234 562 00:29:30,234 --> 00:29:31,400 Och vi har matrisprodukter. 563 00:29:31,400 --> 00:29:33,970 564 00:29:33,970 --> 00:29:37,810 Genom de sätt, såg du hur när jag förklarade n, den 2-4 565 00:29:37,810 --> 00:29:43,570 vektor fick cyklade tills den fyllde upp alla n? 566 00:29:43,570 --> 00:29:45,710 Om du ville ta egenvärde nedbrytning, 567 00:29:45,710 --> 00:29:46,960 Detta är något som vi kan göra mycket lätt. 568 00:29:46,960 --> 00:29:47,709 Vi kan göra eigen n. 569 00:29:47,709 --> 00:29:52,290 570 00:29:52,290 --> 00:29:54,600 Och så detta är vår första möter med en lista. 571 00:29:54,600 --> 00:29:57,000 >> Så eigen n är en lista med två nycklar. 572 00:29:57,000 --> 00:29:58,430 Värden, som är denna matris här. 573 00:29:58,430 --> 00:30:01,030 Och vektorer, som är denna array här. 574 00:30:01,030 --> 00:30:08,240 Så om du ville att extrahera, säg, denna tredje kolumnen 575 00:30:08,240 --> 00:30:13,080 från egenvektorer matrisen, eftersom egenvektorerna är kolumnvektorer. 576 00:30:13,080 --> 00:30:24,400 Så vi kan göra vec eigen n dollartecken vektorer, kommatecken 3 i [OHÖRBAR]. 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 Är det, som du kanske tror. 580 00:30:34,100 --> 00:30:39,210 >> Då säga n gånger procent tider vec. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Så resultatet här verkligen ser ut om vi tog tredje egenvärde här, 583 00:30:48,320 --> 00:30:50,390 vilket överensstämmer med den tredje egenvektor. 584 00:30:50,390 --> 00:30:53,190 Det multiplicerade bara allt denna egenvektor, komponent-wise, 585 00:30:53,190 --> 00:30:53,990 av egenvärdet. 586 00:30:53,990 --> 00:30:57,760 Och det är vad vi skulle förvänta oss, eftersom det är vad egenvärden är. 587 00:30:57,760 --> 00:31:00,890 Har någon här inte tagit linjär algebra? 588 00:31:00,890 --> 00:31:02,530 Ett par personer, OK. 589 00:31:02,530 --> 00:31:04,030 Bara stänga din hjärna av för lite. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 Och faktiskt om vi tar eigen n dollar teckenvärden 3 gånger vec, 592 00:31:20,720 --> 00:31:21,810 väl få samma sak. 593 00:31:21,810 --> 00:31:24,726 Det är formaterad annorlunda som en rad vektor i stället för en kolumnvektor, 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 Och så de är i stort sett trevliga saker som vi kan göra med matriser, 597 00:31:35,170 --> 00:31:36,489 påvisade listor. 598 00:31:36,489 --> 00:31:39,030 Jag ska visa den fina saker om funktioner. 599 00:31:39,030 --> 00:31:41,750 >> Så låt oss säga-- [OHÖRBAR] funktion, låt oss kalla 600 00:31:41,750 --> 00:31:51,960 det funk mot funktion n squared-- faktiskt, det är inte riktigt den bästa. 601 00:31:51,960 --> 00:31:55,632 a, b, en kvadrat plus f. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Så en sak om funktioner, återigen, är de 604 00:32:00,380 --> 00:32:01,963 behöver inte explicita retur uttalanden. 605 00:32:01,963 --> 00:32:04,250 Så du kan bara-- den sista uttalande utvärderas 606 00:32:04,250 --> 00:32:07,502 kommer att vara ett uttalande tillbaka, eller returnerade värdet. 607 00:32:07,502 --> 00:32:10,460 Så i det här fallet, är vi bara utvärdera ett uttalande, en fyrkantig plus b. 608 00:32:10,460 --> 00:32:12,043 Det kommer att vara standardreturvärdet. 609 00:32:12,043 --> 00:32:14,530 Det skadar aldrig att sätta in returvärden explicit, 610 00:32:14,530 --> 00:32:16,880 speciellt om du arbetar med en funktion av mycket komplicerad logik 611 00:32:16,880 --> 00:32:17,380 flöde. 612 00:32:17,380 --> 00:32:18,450 Men du inte behöver dem. 613 00:32:18,450 --> 00:32:24,890 Så nu kan vi göra funk 5, 1, och Detta är i princip vad du kan förvänta dig. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Något annat vi kan göra, vi faktiskt kan göra funk b 616 00:32:31,270 --> 00:32:33,260 är lika med 1, en lika 5. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Så om vi anger vilket nummer här, som argument går till som argument 619 00:32:40,770 --> 00:32:44,680 i funktionen, kan vi vända runt Dessa värden var vi vill. 620 00:32:44,680 --> 00:32:48,405 >> PUBLIK: Finns det en anledning att skriva ut med b 621 00:32:48,405 --> 00:32:52,404 lika i motsats till bara använda siffror och kommatecknet? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Ja, vanligtvis göra detta om du har funktioner 623 00:32:54,820 --> 00:32:58,540 med en massa argument. 624 00:32:58,540 --> 00:33:00,690 Det kan ofta vara flaggor som du skulle bara 625 00:33:00,690 --> 00:33:03,130 vill använda i sällsynta fall. 626 00:33:03,130 --> 00:33:06,740 Och detta sätt kan du only-- dig kan hänvisa till de specifika argument 627 00:33:06,740 --> 00:33:09,110 som du vill använda icke-standardvärden för, 628 00:33:09,110 --> 00:33:14,470 och du behöver inte skriva ut ett gäng flaggor lika falskt efter dem. 629 00:33:14,470 --> 00:33:19,710 Eller jag kan skriva det igen med ett standardvärde som b är lika med två. 630 00:33:19,710 --> 00:33:26,289 Och då kunde jag göra f funk, Jag ska göra 4, 1 den här gången. 631 00:33:26,289 --> 00:33:28,580 Och 17, vilket är 4 kvadrat plus 1, som du kanske tror. 632 00:33:28,580 --> 00:33:34,290 >> Men jag kunde också bara kallar detta med funk 4, 633 00:33:34,290 --> 00:33:36,970 och jag ska få 18, eftersom Jag inte anger b. 634 00:33:36,970 --> 00:33:38,550 Så b får standardvärdet 2. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, så nu om du är efter tillsammans med demo, 637 00:33:47,200 --> 00:33:51,010 skriver denna linje på ditt kommando uppmana och se vad som kommer upp. 638 00:33:51,010 --> 00:33:52,090 Egentligen inte göra det. 639 00:33:52,090 --> 00:33:52,590 Skriver detta. 640 00:33:52,590 --> 00:33:57,780 641 00:33:57,780 --> 00:34:01,000 Du bör få något sånt här. 642 00:34:01,000 --> 00:34:04,780 Så mtcars är en inbyggd uppgifter fastställts för denna demonstration 643 00:34:04,780 --> 00:34:13,550 ändamål som kommer with-- som kommer i standard med din r distribution. 644 00:34:13,550 --> 00:34:19,211 Detta är en sammanställning av statistik från en 1974 frågan om Motor Trend magazine 645 00:34:19,211 --> 00:34:20,710 på ett antal olika bilmodeller. 646 00:34:20,710 --> 00:34:28,270 >> Så det finns miles per gallon, cylinders-- Jag har glömt vad disp är-- hästkrafter. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Troligen. 649 00:34:32,420 --> 00:34:36,920 Om du bara Google MT bilar, då en av de första resultaten 650 00:34:36,920 --> 00:34:38,730 kommer att vara från officiell r dokumentation 651 00:34:38,730 --> 00:34:41,080 och det kommer att förklara alla dessa datafält. 652 00:34:41,080 --> 00:34:47,020 Så vikt är-- vikt är vikten på bilen i ton. 653 00:34:47,020 --> 00:34:48,880 Q sek är fjärdedel mil tiden. 654 00:34:48,880 --> 00:34:52,409 655 00:34:52,409 --> 00:34:55,850 Så nu kan vi göra några roliga saker om MT bilar är ett datafält. 656 00:34:55,850 --> 00:35:01,640 >> Så vi kan göra saker som rad namn, mt bilar. 657 00:35:01,640 --> 00:35:05,490 Och detta är en lista över alla rader i datauppsättningen som är namn på bilar. 658 00:35:05,490 --> 00:35:10,780 Vi kan göra colnames, mt bilar här. 659 00:35:10,780 --> 00:35:15,500 Om du gör mt bilar, sub-numeriskt index, som 2. 660 00:35:15,500 --> 00:35:18,177 vi får den andra kolumnen av detta, vilket skulle vara cylindrar. 661 00:35:18,177 --> 00:35:19,370 >> PUBLIK: Vad gjorde du? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: jag skrev mt bilar, konsoler e, 663 00:35:21,570 --> 00:35:24,180 som gav mig den andra kolonn av mt bilar. 664 00:35:24,180 --> 00:35:34,501 665 00:35:34,501 --> 00:35:38,110 Eller om vi vill ha en rad, kan jag skriva mtcars Comma 2, till exempel. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Annat v 2 kommatecken, sådär. 668 00:35:46,390 --> 00:35:48,880 Och som går i rad. 669 00:35:48,880 --> 00:35:54,680 Detta här bara ger dig en kolonn, men kolonnen som en vektor. 670 00:35:54,680 --> 00:36:04,634 671 00:36:04,634 --> 00:36:06,425 Jag insåg just nu har jag glömde att demonstrera 672 00:36:06,425 --> 00:36:09,150 några coola saker om vektorer som du kan göra med index. 673 00:36:09,150 --> 00:36:10,480 Så låt mig göra det just nu. 674 00:36:10,480 --> 00:36:17,130 Så låt oss göra c gets-- sätta detta på pause-- 2 gånger 1 till 10. 675 00:36:17,130 --> 00:36:21,360 Så c är bara kommer att bli vektorn 2 genom 20. 676 00:36:21,360 --> 00:36:24,640 Jag kan ta element som denna, C2. 677 00:36:24,640 --> 00:36:30,942 Jag kan passera i en vektor så här, C- låt mig 678 00:36:30,942 --> 00:36:34,470 använda annat namn än c, som vec c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 I grund och botten, jag gör detta så att du inte får 681 00:36:39,340 --> 00:36:45,010 förvirrad mellan c som en vektorkonstruktion funktion, 682 00:36:45,010 --> 00:36:48,800 och sedan c som ett variabelnamn. 683 00:36:48,800 --> 00:36:53,120 VEC konsoler c 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Detta får mig den fjärde, femte, och sju element i uppsättningen. 685 00:36:56,540 --> 00:37:01,740 Jag kan göra vec, lägg i en negativ index, liksom negativ 4. 686 00:37:01,740 --> 00:37:06,500 Det kommer att få mig ut detta med det fjärde elementet avlägsnas. 687 00:37:06,500 --> 00:37:10,140 Sen om jag ville göra skivor, Jag kan göra vec 2 till 6. 688 00:37:10,140 --> 00:37:15,480 2 kolon 6 är bara en annan vektor, som är 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Spottar ut det. 690 00:37:18,230 --> 00:37:20,770 >> Så hur som helst, tillbaka till mt bilar. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Så låt oss göra några regressioner. 693 00:37:28,450 --> 00:37:34,240 Låt oss säga att modellen gets-- låt oss linjärt regress-- Jag vet inte. 694 00:37:34,240 --> 00:37:41,780 Först ska vi fäster mtcars, naturligtvis. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Så [OHÖRBAR] modell lm, låt oss regrediera miles per gallon på tilde vikt. 697 00:38:00,010 --> 00:38:03,300 Och sedan dataram är mtcars. 698 00:38:03,300 --> 00:38:06,830 Så sammanfattande modell. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, så det ser lite komplicerat. 701 00:38:15,595 --> 00:38:19,380 Men i grund och botten, ser ut som om vi försöka uttrycka miles per gallon 702 00:38:19,380 --> 00:38:23,970 som en linjär funktion av vikt, sedan fick vi denna linje här, 703 00:38:23,970 --> 00:38:28,730 vilka fångar upp vid 37,28. 704 00:38:28,730 --> 00:38:33,830 37,28 skulle vara de teoretiska miles per gallon en bil som väger noll. 705 00:38:33,830 --> 00:38:41,210 Och sedan för varje ytterligare ton, du slår ungefär fem miles per gallon 706 00:38:41,210 --> 00:38:42,440 bort av detta. 707 00:38:42,440 --> 00:38:45,120 Båda dessa koefficienter du kan se, standardfel där. 708 00:38:45,120 --> 00:38:47,870 Och de är mycket statistiskt signifikant. 709 00:38:47,870 --> 00:38:55,740 >> Så vi kan vara mycket säkert 1 e 10 till -10. 710 00:38:55,740 --> 00:38:59,510 Så 1 gånger något till negativa 10, att om du gör en tyngre bil, 711 00:38:59,510 --> 00:39:01,440 Det kommer att ha sämre miles per gallon. 712 00:39:01,440 --> 00:39:04,940 713 00:39:04,940 --> 00:39:07,250 Eller vi kan testa någon annan modell. 714 00:39:07,250 --> 00:39:09,230 Liksom i stället för regression detta på vikt, 715 00:39:09,230 --> 00:39:12,600 låt oss regrediera det på logg över vikt, eftersom kanske en effektiv vikt 716 00:39:12,600 --> 00:39:15,690 på körsträcka är på något sätt inte är linjär. 717 00:39:15,690 --> 00:39:18,540 >> Detta gav oss en r kvadrat 0,7528. 718 00:39:18,540 --> 00:39:19,610 Så låt oss prova det här. 719 00:39:19,610 --> 00:39:21,485 Den här gången ska vi göra en annan variabel, också. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Så Sammanfattningsvis model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 Okej, så igen, vi fick våra bästa anpassade linjen här. 724 00:39:31,390 --> 00:39:36,160 Och detta time-- detta säger, i princip att varje gång du 725 00:39:36,160 --> 00:39:38,090 öka vikten av en bil med en faktor e 726 00:39:38,090 --> 00:39:40,580 du förlorar så många miles per gallon. 727 00:39:40,580 --> 00:39:43,210 728 00:39:43,210 --> 00:39:50,326 >> Och så denna gång vår resterande standard fel det-- det spelar ingen roll, egentligen. 729 00:39:50,326 --> 00:39:53,540 Den återstående medelfelet är i princip bara standardfelet 730 00:39:53,540 --> 00:39:57,760 att du har kvar efter att du ta bort trendlinjen. 731 00:39:57,760 --> 00:40:02,805 Och vår r kvadrat här är 0,81, som är lite bättre än vad 732 00:40:02,805 --> 00:40:07,640 vi hade tidigare, 0,52. 733 00:40:07,640 --> 00:40:09,750 >> Och så nu ska vi lägga till en sikt för att denna regression. 734 00:40:09,750 --> 00:40:13,020 Så låt oss regrediera miles per gallon både på stocken av vikterna 735 00:40:13,020 --> 00:40:21,130 och låt oss göra, q miles, fjärdedel mil tid. 736 00:40:21,130 --> 00:40:26,190 OK, måste den ha the-- okej, 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-- ledsen, vad? 740 00:40:35,000 --> 00:40:37,000 Låt mig kalla detta något annat än model2. 741 00:40:37,000 --> 00:40:38,000 Låt mig kalla detta model3. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 Och så nu kan vi göra sammandrag model3. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 Och så igen, detta är i grunden vad man kan förvänta sig. 746 00:40:49,100 --> 00:40:51,750 Du har en positiv skärningspunkt. 747 00:40:51,750 --> 00:40:54,550 Den effektiva ökande vikt är negativ. 748 00:40:54,550 --> 00:40:58,490 Och effektiva ökande fjärdedel mil tid 749 00:40:58,490 --> 00:41:02,420 är positivt, men trots i mindre grad än vikt. 750 00:41:02,420 --> 00:41:06,010 Nu intuitivt, kan du göra känsla av detta genom att säga tänka på sportbilar. 751 00:41:06,010 --> 00:41:08,950 Det finns en mycket snabb acceleration, en mycket kort fjärdedel mil tider. 752 00:41:08,950 --> 00:41:13,729 De kommer även att använda mer gas, medan mer förnuftiga bilar går 753 00:41:13,729 --> 00:41:16,020 att ha långsammare acceleration, högre kvartalet mile gånger, 754 00:41:16,020 --> 00:41:20,890 och använder mindre gas ,, så högre miles per gallon. 755 00:41:20,890 --> 00:41:21,390 Bra. 756 00:41:21,390 --> 00:41:23,431 Och så nu är det dags att rita något sådant. 757 00:41:23,431 --> 00:41:27,810 Så låt oss do-- så nakna ben vi kan göra plots-- 758 00:41:27,810 --> 00:41:35,280 eftersom jag har bifogat denna dataram before-- vi kan bara göra tomter, vikt mpg. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Gör detta till en lite större. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Där vi i stort sett har en punktdiagram, men poängen 763 00:41:57,350 --> 00:41:58,690 är ganska svårt att se på detta. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Jag minns inte på rak arm vad syntax är för att ändra handlingen. 766 00:42:10,900 --> 00:42:14,100 Så jag antar att detta kommer att vara ett bra tillfälle att ta upp, 767 00:42:14,100 --> 00:42:18,000 Det är en mycket trevlig inbyggd hjälp funktionen hjälp citat funktion namn. 768 00:42:18,000 --> 00:42:21,690 Vi kommer att ta upp i princip vad du vill. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Jag tror jag ska faktiskt göra detta typ lika p för poäng tomter. 771 00:42:32,730 --> 00:42:34,369 Visste att ändra på något? 772 00:42:34,369 --> 00:42:35,160 Och nej, inte riktigt. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Okej. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> Av någon anledning, när jag gjorde detta på min egen dator för ett tag sedan, 777 00:42:49,580 --> 00:42:52,080 alla scatter punkter var mycket tydligare. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 Hur som helst, är scatter typ av synligt? 780 00:43:13,970 --> 00:43:15,124 Det finns en där. 781 00:43:15,124 --> 00:43:16,165 Några där, några där. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 Du kan sortera av se dem, eller hur? 784 00:43:21,185 --> 00:43:24,310 Så om vi vill lägga till en bäst anpassade linjen med denna kurva här, vilket är lite nakna 785 00:43:24,310 --> 00:43:29,290 bones-- låt mig göra det lite trevligare. 786 00:43:29,290 --> 00:43:38,075 Huvud lika kontra vikt. 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 Återigen, kan du se hur användbar valfria argument är här med också 790 00:43:53,570 --> 00:43:58,090 inte behöva sätta saker i en viss ordning med tangentbord argument 791 00:43:58,090 --> 00:44:01,600 när du har tomter, eftersom dessa tar en hel del argument. 792 00:44:01,600 --> 00:44:07,490 >> Xlab lika vikt, vikt, ton. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Okej. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, ja, den här enheten är att vara lite irriterande. 797 00:44:21,480 --> 00:44:30,160 Men du kan se slags uppe, det finns en graf titel på sidan. 798 00:44:30,160 --> 00:44:35,260 Här borta there's-- på botten här finns axeletiketter. 799 00:44:35,260 --> 00:44:37,700 Jag minns inte rak arm vad kommandona ars-- 800 00:44:37,700 --> 00:44:41,000 vad funktioner är att öka storleken på dessa etiketter och titlar, 801 00:44:41,000 --> 00:44:43,110 men de är där. 802 00:44:43,110 --> 00:44:46,625 >> Och så om vi vill lägg bäst anpassade linjen, 803 00:44:46,625 --> 00:44:49,250 vi kunde göra något like-- jag har syntaxen skrivit upp här. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Så minns vi bara lägga modell var mpg, vikt, mtcars. 806 00:45:11,130 --> 00:45:16,470 Och så om jag ville lägga till en bästa passform line, jag kunde göra a, b linje modell. 807 00:45:16,470 --> 00:45:18,556 Och bom, har vi en bäst anpassad linje. 808 00:45:18,556 --> 00:45:19,970 Det är ganska svårt att se igen. 809 00:45:19,970 --> 00:45:22,178 Jag är ganska ledsen om tekniska svårigheter. 810 00:45:22,178 --> 00:45:25,230 Men det går i princip övre vänstra till nedre högra hörnet. 811 00:45:25,230 --> 00:45:27,550 >> Och om skalan var större kunde man se 812 00:45:27,550 --> 00:45:31,260 att avlyssna är vad du kan hitta från sammanfattande statistik 813 00:45:31,260 --> 00:45:34,790 Om du skriver sammanfattande modell. 814 00:45:34,790 --> 00:45:40,130 OK, så jag hoppas att alla får något av en känsla av vad 815 00:45:40,130 --> 00:45:42,030 R är, vad det är bra för. 816 00:45:42,030 --> 00:45:45,520 Du kan göra mycket trevligare tomter än detta på din egen tid, om du vill. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Så den främmande funktionsgränssnittet. 819 00:45:53,950 --> 00:46:00,330 Detta är något som inte är normalt omfattas av introduktionsföreläsningar 820 00:46:00,330 --> 00:46:03,560 eller introduktions något för r. 821 00:46:03,560 --> 00:46:05,584 Det är inte troligt att du kommer att behöva det. 822 00:46:05,584 --> 00:46:08,000 Men hittade jag den användbar i mina egna projekt i det förflutna. 823 00:46:08,000 --> 00:46:10,984 Och det är inte bra handledning för det på nätet. 824 00:46:10,984 --> 00:46:12,900 Så jag ska bara bråttom du hela denna 825 00:46:12,900 --> 00:46:16,606 och då är du fri att lämna. 826 00:46:16,606 --> 00:46:18,480 Och så främmande funktion gränssnitt är vad 827 00:46:18,480 --> 00:46:23,130 du kan använda för att ringa ut för att se funktioner med en R. Internt 828 00:46:23,130 --> 00:46:29,850 R bygger på C. R aritmetik är bara C: s 64-bitars flyttal aritmetik, 829 00:46:29,850 --> 00:46:32,852 som är typ dubbelt [OHÖRBAR]. 830 00:46:32,852 --> 00:46:35,060 Och kanske du vill göra detta för ett gäng skäl. 831 00:46:35,060 --> 00:46:39,250 För en, är R tolkas, är det inte samman ner till maskinkod. 832 00:46:39,250 --> 00:46:42,170 Så du kan skriva din inre loopar i C och sedan få 833 00:46:42,170 --> 00:46:45,920 Fördelen med att använda R. Gillar det är lite bekvämare än C. 834 00:46:45,920 --> 00:46:48,899 Den har bättre graf faciliteter och allt. 835 00:46:48,899 --> 00:46:51,690 Och samtidigt som de kan få toppfart av de inre öglorna, 836 00:46:51,690 --> 00:46:53,650 som är där du verkligen behöver det. 837 00:46:53,650 --> 00:46:56,330 >> Återanvändning existerande bibliotek C, det är också viktigt. 838 00:46:56,330 --> 00:47:00,320 Om du har några C-biblioteket för lika, Jag vet inte, Fouriertransformer, 839 00:47:00,320 --> 00:47:05,190 eller några mycket Arkeiska statistik förfarande som används 840 00:47:05,190 --> 00:47:09,470 i högenergiastrofysik eller något, jag vet inte. 841 00:47:09,470 --> 00:47:13,058 Högenergiastrofysik är inte ens en tanke, tror jag. 842 00:47:13,058 --> 00:47:16,480 Men du kan göra det istället för att ha att skriva en infödd R port av dem. 843 00:47:16,480 --> 00:47:22,725 Och på the-- och igen, som om du titta i de flesta av R: s standardbibliotek, 844 00:47:22,725 --> 00:47:25,600 på interna, de interna är kommer att använda utländska funktionen 845 00:47:25,600 --> 00:47:26,724 gränssnitt i mycket stor utsträckning. 846 00:47:26,724 --> 00:47:31,630 De kommer att ha saker som Fourier omvandlar eller computing korrelation 847 00:47:31,630 --> 00:47:34,890 koefficienter skriven i C, och de kommer bara R omslag runt dem. 848 00:47:34,890 --> 00:47:38,230 Gränssnittet är en lite svårt. Jag tror 849 00:47:38,230 --> 00:47:43,750 dess svårigheter är överdriven i en Många av de instruktioner som du hittar. 850 00:47:43,750 --> 00:47:46,200 Men ändå, det är lite förvirrande. 851 00:47:46,200 --> 00:47:48,650 Och jag har inte kunnat hitta en bra handledning för det, 852 00:47:48,650 --> 00:47:51,980 så detta är det just nu. 853 00:47:51,980 --> 00:47:55,360 Återigen, detta hela segment är mer för senare bruk. 854 00:47:55,360 --> 00:47:57,687 Oroa dig inte för kopiering allt ner just nu. 855 00:47:57,687 --> 00:48:00,020 Så följande instruktioner är för Unix-liknande system, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Jag vet inte hur det fungerar på Windows, 857 00:48:05,150 --> 00:48:08,280 men snälla bara inte gör din slutprojekt i Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Du verkligen inte vill. 860 00:48:12,460 --> 00:48:14,770 Unix är mycket bättre uppsättning upp för casual programmering. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Så i princip utländska funktionsgränssnitt. 863 00:48:21,390 --> 00:48:24,420 Om du vill skriva en C funktion för användning med R, 864 00:48:24,420 --> 00:48:27,250 Det måste vidta alla argument som pekare. 865 00:48:27,250 --> 00:48:30,666 >> Så för enskilda värden, detta betyder det också framhållit vikten. 866 00:48:30,666 --> 00:48:33,040 För matriser, är detta en pekare till det första elementet, vilket 867 00:48:33,040 --> 00:48:36,750 är vad array namn egentligen betyder. 868 00:48:36,750 --> 00:48:40,140 Återigen, detta är något du bör ha ganska helt ned efter p set fem. 869 00:48:40,140 --> 00:48:43,334 Array namn är bara pekare till det första elementet, 870 00:48:43,334 --> 00:48:44,750 Flyttalstypen är dubbel. 871 00:48:44,750 --> 00:48:47,310 Och din funktion måste återvända ogiltiga. 872 00:48:47,310 --> 00:48:50,810 Det enda sättet att det kan faktiskt berätta R vad som hände 873 00:48:50,810 --> 00:48:54,410 är genom att ändra det minne som R gav det genom det utländska funktion 874 00:48:54,410 --> 00:48:54,910 gränssnitt. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Så jag har skrivit här exempel här, är detta 877 00:49:00,127 --> 00:49:02,460 en funktion som beräknar användning skalärprodukten av två vektorer. 878 00:49:02,460 --> 00:49:05,060 Det tar två argument, vec1, vec2, som är vektorerna själva, 879 00:49:05,060 --> 00:49:06,934 och sedan på n, som är en längd, eftersom igen, 880 00:49:06,934 --> 00:49:12,630 R har inbyggd [OHÖRBAR] för att ta reda på längden av vektorer, men C inte. 881 00:49:12,630 --> 00:49:16,182 I C är en godtycklig vektorer avgränsad del av minnet. 882 00:49:16,182 --> 00:49:17,890 Så sätt kan du beräkna skalärprodukter 883 00:49:17,890 --> 00:49:23,470 är bara ställa denna parameter till noll och sedan iterera genom 884 00:49:23,470 --> 00:49:28,760 från 1 till stjärna n, eftersom n är en pekare till längden, 885 00:49:28,760 --> 00:49:32,929 bara lägga till något till denna ut parametern. 886 00:49:32,929 --> 00:49:34,970 Och det kan vara bra praxis Om du ska göra 887 00:49:34,970 --> 00:49:37,270 detta för att skriva två separata C-funktioner. 888 00:49:37,270 --> 00:49:41,970 En av dem has-- En av dem bara tar de argument och vilka typer 889 00:49:41,970 --> 00:49:43,970 att de normalt skulle vara i C. 890 00:49:43,970 --> 00:49:47,780 >> Så det tar en array argument som pekare. 891 00:49:47,780 --> 00:49:57,090 Men enda värde argument som n, Det tar bara som värden genom att kopiera, 892 00:49:57,090 --> 00:49:57,917 utan pekare. 893 00:49:57,917 --> 00:49:59,750 Och då är det inte [OHÖRBAR] ut pekare. 894 00:49:59,750 --> 00:50:01,290 Och då kan du ha en annan, i princip, 895 00:50:01,290 --> 00:50:03,623 wrapper funktion som i princip hanterar kraven 896 00:50:03,623 --> 00:50:07,740 av utländska funktion gränssnitt för dig. 897 00:50:07,740 --> 00:50:11,840 >> Sättet du kallar detta i R är, en gång du har din funktion skriven i C, 898 00:50:11,840 --> 00:50:17,770 du skriver R cmd shlib, R kommando delat bibliotek, 899 00:50:17,770 --> 00:50:20,110 foo dot c, eller vad filnamnet är, 900 00:50:20,110 --> 00:50:23,020 och OS skal inte i R terminalen. 901 00:50:23,020 --> 00:50:25,200 Och detta kommer att skapa en bibliotek som heter foo prick så. 902 00:50:25,200 --> 00:50:28,180 Och då kan du ladda den i vårt skript eller interaktivt 903 00:50:28,180 --> 00:50:32,310 med kommandot dyn punktbelastning. 904 00:50:32,310 --> 00:50:35,720 Sedan finns det en funktion i R kallas dot c. 905 00:50:35,720 --> 00:50:39,310 >> Detta tar argument som är första namnet på funktionen i C 906 00:50:39,310 --> 00:50:40,970 som du vill ringa. 907 00:50:40,970 --> 00:50:43,920 Och sedan alla parametrar till denna funktion, 908 00:50:43,920 --> 00:50:45,420 de måste vara i rätt ordning. 909 00:50:45,420 --> 00:50:48,580 Du måste använda denna typ tvång fungerar som heltal, såsom 910 00:50:48,580 --> 00:50:52,050 dubbel, karaktär, och som logiskt. 911 00:50:52,050 --> 00:50:54,710 Och sedan när den återgår den listan, som återigen är bara 912 00:50:54,710 --> 00:50:57,550 en tillhörande uppsättning av parameternamn och värden 913 00:50:57,550 --> 00:51:00,950 efter att funktionen har körts. 914 00:51:00,950 --> 00:51:08,520 >> Så i detta fall, eftersom punkt prod har argument vec1, vec2 och int n n ut. 915 00:51:08,520 --> 00:51:11,980 Till prick c vi har dot prod, namnet på funktionen 916 00:51:11,980 --> 00:51:16,250 vi ringer, vec1, vec2, typ coerce. 917 00:51:16,250 --> 00:51:20,060 Längden av endera vektor, Jag valde bara vec1 godtyckligt. 918 00:51:20,060 --> 00:51:25,479 Det skulle vara mer robust för att säga s heltal min längd vec1, längd vec2. 919 00:51:25,479 --> 00:51:27,520 Sedan är det bara som dubbellåga, eftersom vi egentligen inte 920 00:51:27,520 --> 00:51:29,644 bry sig om vad går in i out parameter eftersom vi är 921 00:51:29,644 --> 00:51:32,270 ställer in det till noll i alla fall. 922 00:51:32,270 --> 00:51:37,560 >> Och då resultaten kommer att vara en stora tillhörande uppsättning av grunden 923 00:51:37,560 --> 00:51:42,090 vec1 är vad som helst, är vad vec2. 924 00:51:42,090 --> 00:51:44,330 Men vi är intresserade av ut, så att vi kan få ut det. 925 00:51:44,330 --> 00:51:47,780 Detta är återigen en mycket leksak exempel av en utländsk funktion gränssnitt. 926 00:51:47,780 --> 00:51:54,160 Men om du måste beräkna dot produkter av massiva vektorer i slingor, 927 00:51:54,160 --> 00:51:56,960 eller om du har att göra något annat i en slinga, 928 00:51:56,960 --> 00:51:59,850 och du inte vill förlita sig på R, som har en bit av overhead 929 00:51:59,850 --> 00:52:02,830 inbyggd i den, kan detta vara användbart. 930 00:52:02,830 --> 00:52:05,870 >> Återigen, detta är inte vanligtvis en inledande ämne att R. 931 00:52:05,870 --> 00:52:08,571 Det är inte mycket väl dokumenterat. 932 00:52:08,571 --> 00:52:11,070 Jag bara inklusive det eftersom Jag fann det lämpligt i det förflutna. 933 00:52:11,070 --> 00:52:13,654 Så dåliga metoder. 934 00:52:13,654 --> 00:52:15,820 Jag nämnde att det finns en for-loop i funktionen. 935 00:52:15,820 --> 00:52:21,150 Generellt bör du inte i språket, inte använda den. 936 00:52:21,150 --> 00:52:26,100 Baserat på hur R genomför iteration internt, kan det vara långsam. 937 00:52:26,100 --> 00:52:28,540 De bara också ser ful. 938 00:52:28,540 --> 00:52:32,410 >> R hanterar vektorer mycket snyggt, så Ofta du inte behöver använda den. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Då kan du vanligtvis ersätta en vektor ofta 941 00:52:38,900 --> 00:52:42,490 med dessa funktioner kallas hög ordningens funktioner, karta, Minska, 942 00:52:42,490 --> 00:52:44,404 Hitta eller Filter. 943 00:52:44,404 --> 00:52:46,320 Jag ska bara ge några exempel på vad dessa gör. 944 00:52:46,320 --> 00:52:49,957 Map är en högre ordningens funktion eftersom det tar en funktion som ett argument. 945 00:52:49,957 --> 00:52:52,290 Så du kan ge den en funktion, du kan ge det en array, 946 00:52:52,290 --> 00:52:54,640 och det kommer att tillämpa funktionen till varje element i arrayen 947 00:52:54,640 --> 00:52:55,681 och returnera den nya arrayen. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Minska, i princip du ge det är en array, ger du det 950 00:53:00,160 --> 00:53:02,930 en funktion som tar två argument. 951 00:53:02,930 --> 00:53:07,100 Det kommer att tillämpa funktionen först, första argumentet med viss startvärde. 952 00:53:07,100 --> 00:53:09,440 Sedan till detta resultat i den andra. 953 00:53:09,440 --> 00:53:12,590 Sedan till detta resultat i den tredje, sedan till det resultatet i det fjärde. 954 00:53:12,590 --> 00:53:14,870 Och sedan tillbaka när det kommer till slutet. 955 00:53:14,870 --> 00:53:17,620 Så till exempel, om du vill beräkna summan av alla element 956 00:53:17,620 --> 00:53:23,240 i en grupp, än man kan kalla minska med [OHÖRBAR] minska ett tillägg 957 00:53:23,240 --> 00:53:26,620 funktion, som funk a, b, returnera en plus b. 958 00:53:26,620 --> 00:53:28,960 Och sedan börja ett värde av 0. 959 00:53:28,960 --> 00:53:32,950 >> Och alla dessa, kan du hitta dem beskrivs i R dokumentation, 960 00:53:32,950 --> 00:53:35,720 i någon lärobok på funktionell programmering. 961 00:53:35,720 --> 00:53:38,330 Det finns också denna klass av funktioner som anropas gäller funktioner, 962 00:53:38,330 --> 00:53:42,807 som jag don't-- de är lite svårt att förklara, 963 00:53:42,807 --> 00:53:45,640 men om du tittar i [OHÖRBAR] bokade som jag citerade i början, 964 00:53:45,640 --> 00:53:48,615 förklarar han dem ganska bra i hans appendix på forskning programmering. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Mer om metoder, lägga till 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 Jag tror att jag ska rätta till det. 971 00:54:02,900 --> 00:54:07,450 I den första raden, vec pil, att pilen ska inte vara där. 972 00:54:07,450 --> 00:54:10,920 Du kan tilldela en vektor, igen, genom att ta sin längd plus 1 973 00:54:10,920 --> 00:54:13,220 och tilldela något värde till det. 974 00:54:13,220 --> 00:54:18,970 Det kommer att förlänga vektorn, eller så kan göra vec jämlikar c, vec newValue. 975 00:54:18,970 --> 00:54:21,540 Återigen, om du använder C med ett argument som en vektor, 976 00:54:21,540 --> 00:54:23,300 den resulterande hierarkin blir tillplattad. 977 00:54:23,300 --> 00:54:27,160 Så du ska bara få en vektor som är förlängas med ett. 978 00:54:27,160 --> 00:54:30,410 Gör aldrig detta. 979 00:54:30,410 --> 00:54:33,330 >> Anledningen till att du inte bör göra detta är det. 980 00:54:33,330 --> 00:54:37,430 När du allokerar en vektor, det ger det en viss bit av minne. 981 00:54:37,430 --> 00:54:40,680 Om du ökar denna vektor storlek, Det måste omfördela vektorn 982 00:54:40,680 --> 00:54:43,820 någonannanstans. 983 00:54:43,820 --> 00:54:46,980 Och så omfördelning är ganska dyra. 984 00:54:46,980 --> 00:54:50,530 Jag kommer inte att gå in på detaljer om hur minnesFördelningsgenomförs 985 00:54:50,530 --> 00:54:57,280 på operativsystemnivå, men det tar en hel del tid 986 00:54:57,280 --> 00:54:58,962 att hitta en ny bit av minne. 987 00:54:58,962 --> 00:55:00,920 Och även om du är omfördelning av massor 988 00:55:00,920 --> 00:55:03,500 progressivt större bitar, hamnar man 989 00:55:03,500 --> 00:55:06,420 med något som kallas minne fragmentering, 990 00:55:06,420 --> 00:55:09,390 där det tillgängliga minnet är uppdelat i massor av små block 991 00:55:09,390 --> 00:55:11,500 i minnesfördelningssynpunkt. 992 00:55:11,500 --> 00:55:15,340 Och det blir svårare och svårare att hitta minne för annat. 993 00:55:15,340 --> 00:55:19,455 Så istället, om du behöver göra detta, om du behöver för att växa en vektor från den ena änden 994 00:55:19,455 --> 00:55:24,240 till nästa, i stället för att lägga till det hela tiden, bör du förallokera det. 995 00:55:24,240 --> 00:55:29,310 Vec pil, vektorlängden lika 1000, eller något annat. 996 00:55:29,310 --> 00:55:33,200 >> Och då kan du bara tilldela till vektorn värderingar en 997 00:55:33,200 --> 00:55:36,000 en tid efter att du har tilldelats det en gång. 998 00:55:36,000 --> 00:55:40,140 Jag sprang in i detta, igen, mitt sommarjobb när jag skrev NRA differential 999 00:55:40,140 --> 00:55:42,120 ekvationslösaren. 1000 00:55:42,120 --> 00:55:43,180 Inte symboliska numeriska. 1001 00:55:43,180 --> 00:55:49,290 Tanken är att när du har ett värde för din lösning, 1002 00:55:49,290 --> 00:55:51,240 du använda detta för att beräkna nästa en. 1003 00:55:51,240 --> 00:55:53,700 Så min naturliga naiv lutning var att säga OK, 1004 00:55:53,700 --> 00:55:56,930 så jag ska börja med en vektor det är ett betydande värde. 1005 00:55:56,930 --> 00:56:01,260 Beräkna från att nästa värde som går på min lösning vektor, 1006 00:56:01,260 --> 00:56:02,630 och bifoga denna. 1007 00:56:02,630 --> 00:56:05,290 >> Skapa något annat, bifoga denna. 1008 00:56:05,290 --> 00:56:08,120 Det gick mycket, mycket långsamt. 1009 00:56:08,120 --> 00:56:11,540 Och när jag insåg detta och jag har ändrat mitt system 1010 00:56:11,540 --> 00:56:16,020 från bifogande till denna vektor liknande 10 tusen till 100 tusen gånger, 1011 00:56:16,020 --> 00:56:18,910 att bara pre-allokering av en vektor och bara köra med det. 1012 00:56:18,910 --> 00:56:22,100 Jag fick mer än 1000 gånger påskynda. 1013 00:56:22,100 --> 00:56:26,280 Så det här är en mycket vanlig fälla för R programmering. 1014 00:56:26,280 --> 00:56:31,560 Om du behöver för att bygga upp en vektor bit för bit, pre-fördela det. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> En annan vanlig resa up-- detta är min sista slide, inte worry-- är felhantering. 1017 00:56:40,240 --> 00:56:42,890 R, att vara uppriktig, inte verkligen gör detta mycket väl. 1018 00:56:42,890 --> 00:56:45,010 Det finns många problem som kan dyka upp. 1019 00:56:45,010 --> 00:56:48,360 Till exempel, om du får en array eller en vektor av en funktion 1020 00:56:48,360 --> 00:56:52,377 att du väntade en enda värde för att komma från, eller vice versa, 1021 00:56:52,377 --> 00:56:55,460 och du passerar det till en funktion som du skrev förväntar ett enda värde, 1022 00:56:55,460 --> 00:56:57,270 som kan vara ett problem. 1023 00:56:57,270 --> 00:57:01,440 >> Vissa funktioner returnera null som gör, säger, 1024 00:57:01,440 --> 00:57:05,560 läsa från en obefintlig nyckel i en lista. 1025 00:57:05,560 --> 00:57:08,527 Men null är inte som C där om du försöker läsa 1026 00:57:08,527 --> 00:57:11,360 från en gammal pekare, [OHÖRBAR] till null pointer, bara seg det fel 1027 00:57:11,360 --> 00:57:14,109 och om du är i din debugger det talar om exakt var du befinner dig. 1028 00:57:14,109 --> 00:57:17,080 1029 00:57:17,080 --> 00:57:20,772 Istället null kommer do-- funktioner kommer att göra oförutsägbara saker 1030 00:57:20,772 --> 00:57:21,730 om de är handed null. 1031 00:57:21,730 --> 00:57:24,575 Som om du räckte max null, Det ska ge dig negativ oändlighet. 1032 00:57:24,575 --> 00:57:27,230 1033 00:57:27,230 --> 00:57:28,190 Och så, ja. 1034 00:57:28,190 --> 00:57:30,880 1035 00:57:30,880 --> 00:57:32,630 Och så detta hände till mig en gång när jag hade 1036 00:57:32,630 --> 00:57:34,771 förändrats en massa områden i min lista struktur 1037 00:57:34,771 --> 00:57:37,520 en gång utan att ändra dem någon annanstans när jag läste dem. 1038 00:57:37,520 --> 00:57:40,670 Och sedan fick jag alla sorters slump oändlighet resultat dyka upp 1039 00:57:40,670 --> 00:57:43,080 och jag ingen aning om var de kom ifrån. 1040 00:57:43,080 --> 00:57:45,310 Och tyvärr, det finns ingen riktig R strikt läge 1041 00:57:45,310 --> 00:57:48,940 där du kan säga om något ser ut som det skulle vara ett misstag, 1042 00:57:48,940 --> 00:57:51,960 bara stanna där så jag kan vara disciplinerade och fixa det. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 Men det finns något kallas stopp om inte. 1045 00:57:57,240 --> 00:58:00,480 Detta motsvarar C: s hävda, Om du har pratat om det. 1046 00:58:00,480 --> 00:58:02,690 Jag tror inte att C hävda är en föreläsning ämne, 1047 00:58:02,690 --> 00:58:06,370 men din sektionsledare kan ha gått över den. 1048 00:58:06,370 --> 00:58:10,393 Och sluta om inte i grund och botten tar någon predikat, så de uttalanden som 1049 00:58:10,393 --> 00:58:11,824 kan vara sant eller falskt. 1050 00:58:11,824 --> 00:58:13,490 Och om det är falskt, stannar sitt program. 1051 00:58:13,490 --> 00:58:18,260 Den talar om exakt vad linje du var på och vilka villkor misslyckades. 1052 00:58:18,260 --> 00:58:21,910 >> Och detta mycket användbart, till exempel, sanity kontroll, funktionsingångar. 1053 00:58:21,910 --> 00:58:25,110 Så om du har en funktion och du förväntar dig, säg, 1054 00:58:25,110 --> 00:58:29,640 Om du ska ge mig en dag, jag vill datum vara bara en vektor med längden 1 1055 00:58:29,640 --> 00:58:31,735 och någonstans mellan 1 och 31. 1056 00:58:31,735 --> 00:58:34,420 1057 00:58:34,420 --> 00:58:36,170 Och om inte, jag vet något har gått fel. 1058 00:58:36,170 --> 00:58:40,280 Och jag väljer att stoppa det innan har slumpmässig dominoeffekter med kod 1059 00:58:40,280 --> 00:58:44,190 att det är svårare att spåra igenom. 1060 00:58:44,190 --> 00:58:47,170 Så det är en möjlig använda för stopp om inte. 1061 00:58:47,170 --> 00:58:48,660 >> Hur som helst, OK. 1062 00:58:48,660 --> 00:58:49,690 Så det är slutet. 1063 00:58:49,690 --> 00:58:51,290 Tack så mycket för att ni kom. 1064 00:58:51,290 --> 00:58:53,710 Jag är en rang amatör på detta. 1065 00:58:53,710 --> 00:58:57,270 Så ledsen om du är uttråkad eller förvirrade eller vad har du. 1066 00:58:57,270 --> 00:59:01,670 Jag är glad att svara på frågor via e-post vid connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Detta gäller även för alla titta på detta levande eller senare. 1068 00:59:07,230 --> 00:59:10,190 Dessutom, även om jag inte en TF, jag är också mycket 1069 00:59:10,190 --> 00:59:13,900 villiga att fungera som en inofficiell rådgivare för alla som är 1070 00:59:13,900 --> 00:59:15,460 med hjälp av R i ett slutprojekt. 1071 00:59:15,460 --> 00:59:19,900 >> Om du vill det, sedan bara prata med din TF 1072 00:59:19,900 --> 00:59:23,750 och sedan skriva mig ett mail så Jag vet vad du arbetar med 1073 00:59:23,750 --> 00:59:26,680 och så jag kan ställa in mötet gånger med dig om du vill. 1074 00:59:26,680 --> 00:59:27,990 Så återigen, tack så mycket. 1075 00:59:27,990 --> 00:59:28,960 Jag hoppas du gillade det. 1076 00:59:28,960 --> 00:59:29,450 >> PUBLIK: [OHÖRBAR]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Självklart. 1078 00:59:30,617 --> 00:59:34,910 >> PUBLIK: Vilken typ av projekt skulle en CS elev använda R för? 1079 00:59:34,910 --> 00:59:37,427 1080 00:59:37,427 --> 00:59:40,510 CONNER HARRIS: Så om du inte något som är rent i data mining, 1081 00:59:40,510 --> 00:59:43,790 till exempel, och det finns massor av saker 1082 00:59:43,790 --> 00:59:46,692 du kan göra med det med data gruv- och maskininlärning. 1083 00:59:46,692 --> 00:59:48,900 Du kanske vill använda R för en del av något. 1084 00:59:48,900 --> 00:59:52,022 Jag tog upp ursprungligen exemplet av om du skriver en webbplats 1085 00:59:52,022 --> 00:59:54,730 och du vill köra automatiserade statistisk analys av din server 1086 00:59:54,730 --> 00:59:57,990 stockar vid en viss tid varje dag, som kan vara något som är 1087 00:59:57,990 --> 01:00:01,260 mycket lätt att göra på bara en kort R skript som du kan schemalägga 1088 01:00:01,260 --> 01:00:04,200 att köra varje natt, till exempel. 1089 01:00:04,200 --> 01:00:06,550 >> Och jag är säker, om det finns någon anledning skulle 1090 01:00:06,550 --> 01:00:11,520 vill statistik eller graffunktionerna och har denna kör automatiskt i stället 1091 01:00:11,520 --> 01:00:13,790 för att behöva interagera med saker i Excel, 1092 01:00:13,790 --> 01:00:16,750 till exempel, det är något kanske du vill använda R för. 1093 01:00:16,750 --> 01:00:21,190 Så några fler frågor innan jag lämnar? 1094 01:00:21,190 --> 01:00:21,690 Nej? 1095 01:00:21,690 --> 01:00:24,960 Okej, ja, igen, tack så mycket för att ni kom. 1096 01:00:24,960 --> 01:00:29,417