1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Still I pensare alcuni video emozionante 3 00:00:07,690 --> 00:00:12,570 prodotto da una società di consulenza professionale che utilizza R molto nel suo lavoro. 4 00:00:12,570 --> 00:00:16,329 >> NARRATORE: Cosa c'è dietro le statistiche, le analisi e le visualizzazioni 5 00:00:16,329 --> 00:00:19,770 gli scienziati più brillanti dati che oggi e imprenditori si affidano a 6 00:00:19,770 --> 00:00:22,012 di prendere decisioni forti? 7 00:00:22,012 --> 00:00:23,540 Non si può sempre vedere. 8 00:00:23,540 --> 00:00:24,790 Ma è lì. 9 00:00:24,790 --> 00:00:29,460 Si chiama R, open source r-- il linguaggio di programmazione statistica 10 00:00:29,460 --> 00:00:32,630 che gli esperti di dati di tutto il mondo oltre l'uso per tutto 11 00:00:32,630 --> 00:00:35,350 dalla mappatura ampia sociali e le tendenze di marketing online 12 00:00:35,350 --> 00:00:39,210 allo sviluppo della finanziaria e clima modelli che aiutano a guidare le nostre economie 13 00:00:39,210 --> 00:00:40,780 e comunità. 14 00:00:40,780 --> 00:00:44,910 >> Ma che cosa è esattamente R e dove ha fatto R cominciare? 15 00:00:44,910 --> 00:00:48,620 Beh originariamente, R iniziato qui con due professori 16 00:00:48,620 --> 00:00:51,950 che voleva una statistica migliore piattaforma per i loro studenti. 17 00:00:51,950 --> 00:00:56,030 Così hanno creato un modellato dopo il linguaggio statistico S. 18 00:00:56,030 --> 00:01:00,480 Essi, insieme a molti altri, tenuti a lavorare su e con R, 19 00:01:00,480 --> 00:01:05,489 la creazione di strumenti per la R e la ricerca nuove applicazioni per R ogni giorno. 20 00:01:05,489 --> 00:01:07,750 >> Grazie a questo è sforzo della comunità in tutto il mondo, 21 00:01:07,750 --> 00:01:11,850 R ha continuato a crescere con migliaia di librerie create dall'utente costruiti 22 00:01:11,850 --> 00:01:15,500 per migliorare la funzionalità e R convalida qualità crowd-sourced 23 00:01:15,500 --> 00:01:19,740 e il sostegno della più riconosciuta leader del settore in ogni campo che 24 00:01:19,740 --> 00:01:25,040 utilizza R. Che è grande, perché R è il migliore in quello che fa. 25 00:01:25,040 --> 00:01:28,540 Erba esperti in modo rapido e facilmente interpretare, interagire con, 26 00:01:28,540 --> 00:01:33,790 e visualizzare i dati mostrando la loro rapida crescente comunità di utenti in tutto il mondo R 27 00:01:33,790 --> 00:01:36,380 e vedere come l'open source R continua a plasmare 28 00:01:36,380 --> 00:01:39,340 il futuro di statistica l'analisi e la scienza dei dati. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, grande. 31 00:01:47,710 --> 00:01:50,360 Quindi la mia presentazione sarà un po 'più sobrio. 32 00:01:50,360 --> 00:01:54,380 Non coinvolgerà più di tanto emozionante musica di sottofondo. 33 00:01:54,380 --> 00:01:59,160 Ma come avete visto nel video, R è una sorta di un linguaggio generico programma di scopo. 34 00:01:59,160 --> 00:02:03,720 Ma è stato creato per lo più per il lavoro statistico. 35 00:02:03,720 --> 00:02:07,980 >> Così è stato progettato per le statistiche, per l'analisi dei dati, per il data mining. 36 00:02:07,980 --> 00:02:12,420 E così si può vedere questo in un sacco di le scelte progettuali che i produttori di R 37 00:02:12,420 --> 00:02:13,320 fatto. 38 00:02:13,320 --> 00:02:15,472 È progettato per gran parte, persone che non sono 39 00:02:15,472 --> 00:02:17,930 esperti di programmazione, che sono solo raccogliendo programmazione 40 00:02:17,930 --> 00:02:23,460 sul lato in modo che possano fare il loro lavoro nelle scienze sociali o nelle statistiche 41 00:02:23,460 --> 00:02:25,440 o qualsiasi altra cosa. 42 00:02:25,440 --> 00:02:27,850 >> Ha un sacco di molto importanti differenze da C. 43 00:02:27,850 --> 00:02:33,200 Ma la sintassi e paradigmi che usa sono sostanzialmente gli stessi. 44 00:02:33,200 --> 00:02:36,830 E si dovrebbe sentire abbastanza a casa destra fuori del blocco. 45 00:02:36,830 --> 00:02:38,520 E 'un linguaggio imperativo. 46 00:02:38,520 --> 00:02:40,260 >> Non preoccupatevi troppo di che se non si conosce il termine. 47 00:02:40,260 --> 00:02:42,676 Ma c'è una differenza tra imperativo, dichiarativa, 48 00:02:42,676 --> 00:02:43,810 e funzionale. 49 00:02:43,810 --> 00:02:47,600 Imperativo significa solo fare dichiarazioni che sono fondamentalmente i comandi. 50 00:02:47,600 --> 00:02:52,340 E poi l'interprete o il computer esegua uno per uno. 51 00:02:52,340 --> 00:02:56,630 È debolmente tipizzato, esistono non dichiarazioni di tipo a R. 52 00:02:56,630 --> 00:02:59,130 >> E poi le linee tra i diversi tipi 53 00:02:59,130 --> 00:03:03,920 sono un po 'più sciolto rispetto sono in C, per esempio. 54 00:03:03,920 --> 00:03:06,450 E come ho detto ci sono molto ampie strutture 55 00:03:06,450 --> 00:03:15,610 per i grafici, a fini statistici analisi, per il data mining. 56 00:03:15,610 --> 00:03:19,540 Questi sono entrambi integrati nel linguaggio e, come ha detto il video, 57 00:03:19,540 --> 00:03:23,680 migliaia di librerie di terze parti che è possibile scaricare e utilizzare gratuitamente 58 00:03:23,680 --> 00:03:25,340 con condizioni di licenza molto sciolto. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Quindi, in generale, vi consiglio che si guarda a questi due libri 61 00:03:31,500 --> 00:03:34,610 se si sta andando a lavorare su R. One di loro è il funzionario R principianti 62 00:03:34,610 --> 00:03:35,110 guida. 63 00:03:35,110 --> 00:03:38,660 È gestito dal sviluppatori principali di R. 64 00:03:38,660 --> 00:03:42,400 È possibile scaricarlo di nuovo, privo di carica e legalmente in quel link lì. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Tutte queste diapositive stanno per andare su internet, sul sito CS50 67 00:03:49,869 --> 00:03:50,660 Dopo questo è fatto. 68 00:03:50,660 --> 00:03:53,690 Quindi non c'è bisogno di copiare le cose freneticamente. 69 00:03:53,690 --> 00:03:56,800 >> L'altro è un libro di testo da Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 che è un professore di statistica Carnegie Mellon, denominata Advanced Data 71 00:04:00,100 --> 00:04:02,160 Analisi da un Punto Elementare di vista. 72 00:04:02,160 --> 00:04:04,010 Questo non è principalmente un libro R. 73 00:04:04,010 --> 00:04:07,130 Si tratta di un libro e statistiche è un libro di analisi dei dati. 74 00:04:07,130 --> 00:04:11,990 Ma è molto accessibile a persone che avere un minimo di conoscenze statistiche. 75 00:04:11,990 --> 00:04:13,750 >> Non ho mai preso un corso formale. 76 00:04:13,750 --> 00:04:17,269 So solo che i pezzi da diversi soggetti alleati 77 00:04:17,269 --> 00:04:18,579 che ho preso corsi. 78 00:04:18,579 --> 00:04:21,839 E io ero in grado di capire perfettamente bene. 79 00:04:21,839 --> 00:04:25,630 >> Tutte le figure sono date in R. Sono realizzati in R 80 00:04:25,630 --> 00:04:30,280 e hanno anche listati di codice sotto ogni figura che dirvi 81 00:04:30,280 --> 00:04:33,270 come fare ogni figura con codice R. 82 00:04:33,270 --> 00:04:37,400 E questo è molto utile se si sta cercando di emulare 83 00:04:37,400 --> 00:04:38,650 una figura che si vede in un libro. 84 00:04:38,650 --> 00:04:47,840 >> E scaricare di nuovo libero stat.cmu.edu/cshalizi/ Siamo spiacenti, 85 00:04:47,840 --> 00:04:50,230 che dovrebbero essere gli slash cshalizi tilde. 86 00:04:50,230 --> 00:04:53,150 Farò in modo di correggere che quando le diapositive ufficiali salgono. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV che è solo la acronimo del titolo del libro. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Così generale caveats-- R ha un sacco di funzionalità. 90 00:05:02,500 --> 00:05:05,331 Sto solo andando a essere in grado di coprire le la superficie di un sacco di cose. 91 00:05:05,331 --> 00:05:08,580 Anche la prima parte del seminario sta per essere una sorta di discarica di dati. 92 00:05:08,580 --> 00:05:11,437 Sono abbastanza dispiace. 93 00:05:11,437 --> 00:05:13,770 Fondamentalmente, ho intenzione di farvi conoscere un sacco di cose 94 00:05:13,770 --> 00:05:15,350 destra fuori del blocco, andando il più rapidamente possibile. 95 00:05:15,350 --> 00:05:17,058 E poi si arriva a la parte più divertente, che è 96 00:05:17,058 --> 00:05:20,570 la demo dove posso mostrarvi tutto che abbiamo parlato sullo schermo. 97 00:05:20,570 --> 00:05:23,321 E si può giocare da soli. 98 00:05:23,321 --> 00:05:26,070 Quindi ci sara 'un sacco di materiale tecnico vomitato su qui. 99 00:05:26,070 --> 00:05:28,060 Non preoccuparti di copiare tutto che verso il basso. 100 00:05:28,060 --> 00:05:31,740 Perché A, è possibile ottenere tutte le roba sul sito CS50 più tardi. 101 00:05:31,740 --> 00:05:37,780 E B, non è poi tanto importante memorizzare questo dalle diapositive. 102 00:05:37,780 --> 00:05:40,462 E 'più importante che si ottiene alcuni facilità intuitiva con esso 103 00:05:40,462 --> 00:05:44,220 e che viene da solo a giocare in giro. 104 00:05:44,220 --> 00:05:45,720 >> Allora perché utilizzare R? 105 00:05:45,720 --> 00:05:49,440 In sostanza, se si dispone di un progetto che comporta estrazione grandi insiemi di dati, i dati 106 00:05:49,440 --> 00:05:52,664 visualizzazione, si dovrebbe usare R. Se sei 107 00:05:52,664 --> 00:05:55,830 fare analisi statistiche complicate, che sarebbe difficile in Excel, 108 00:05:55,830 --> 00:05:58,010 per esempio, sarebbe anche essere buono-- anche 109 00:05:58,010 --> 00:06:00,506 se si sta facendo statistici analisi che è automatizzato. 110 00:06:00,506 --> 00:06:02,130 Diciamo che si sta mantenendo un sito web. 111 00:06:02,130 --> 00:06:06,320 E si desidera leggere il log del server ogni giorno e compilare qualche lista, 112 00:06:06,320 --> 00:06:10,320 come i primi paesi che gli utenti sono provenienti da, 113 00:06:10,320 --> 00:06:15,100 alcune statistiche riassuntive sulla durata trascorrono sul tuo sito web o qualsiasi altra cosa. 114 00:06:15,100 --> 00:06:16,910 E si desidera eseguire questo ogni giorno. 115 00:06:16,910 --> 00:06:20,280 >> Ora, se si sta facendo questo in Excel, dovreste andare al vostro log del server, 116 00:06:20,280 --> 00:06:23,490 importare che in un Foglio di dati di Excel, 117 00:06:23,490 --> 00:06:24,910 eseguire tutte le analisi manualmente. 118 00:06:24,910 --> 00:06:27,100 Con R, si può semplicemente scrivere un copione. 119 00:06:27,100 --> 00:06:29,520 Pianificarne l'esecuzione ogni giorno dal sistema operativo. 120 00:06:29,520 --> 00:06:33,657 E poi ogni sera alle 02:00, o quando si pianifica per eseguire, 121 00:06:33,657 --> 00:06:35,990 apparirà attraverso il vostro traffico internet per quel giorno. 122 00:06:35,990 --> 00:06:39,010 E poi il giorno dopo, ti avere questa brillante, nuovo rapporto 123 00:06:39,010 --> 00:06:41,710 o qualunque con tutte le informazioni che hai chiesto. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Quindi, in pratica R è per Cisco la programmazione contro analisi Cisco. 126 00:06:50,217 --> 00:06:51,050 Preliminare è fatto. 127 00:06:51,050 --> 00:06:53,104 Entriamo nelle cose reali. 128 00:06:53,104 --> 00:06:55,020 Quindi ci sono tre reali Tipi in lingua. 129 00:06:55,020 --> 00:06:56,120 C'è tipo numerico. 130 00:06:56,120 --> 00:07:01,250 C'è una sorta di differenza tra interi e virgola mobile, 131 00:07:01,250 --> 00:07:02,769 ma non proprio. 132 00:07:02,769 --> 00:07:04,560 C'è un personaggio tipo, che è stringhe. 133 00:07:04,560 --> 00:07:07,100 E c'è una logica tipo, che è booleani. 134 00:07:07,100 --> 00:07:11,080 >> Ed è possibile convertire tra i tipi usando queste funzioni come numerico, 135 00:07:11,080 --> 00:07:15,220 come personaggio, come logico. 136 00:07:15,220 --> 00:07:17,510 Se si chiama, per esempio, come numerico su una stringa, 137 00:07:17,510 --> 00:07:20,030 cercherà di leggere la stringa come un numero, allo stesso modo 138 00:07:20,030 --> 00:07:25,897 che a2i e scanf fanno, e C. Se si chiama come numerico sul vero o falso 139 00:07:25,897 --> 00:07:26,980 verrà convertito a 1 o 0. 140 00:07:26,980 --> 00:07:29,110 Se si chiama come personaggio su qualsiasi cosa che sarà 141 00:07:29,110 --> 00:07:32,550 convertire in un rappresentazione di stringa. 142 00:07:32,550 --> 00:07:34,990 >> E poi ci sono i vettori e matrici. 143 00:07:34,990 --> 00:07:37,580 Quindi, i vettori sono fondamentalmente 1 array bidimensionali. 144 00:07:37,580 --> 00:07:40,600 Sono ciò che noi chiamiamo gli array in C. Matrici, 2 array bidimensionali. 145 00:07:40,600 --> 00:07:42,350 E poi più alto matrici tridimensionali che potete 146 00:07:42,350 --> 00:07:48,560 hanno 3, 4, 5 o qualsiasi altra cosa dimensioni di valori numerici, di stringhe, 147 00:07:48,560 --> 00:07:52,860 I valori di logici. 148 00:07:52,860 --> 00:07:55,380 >> Hai anche le liste che sono una sorta di array associativo. 149 00:07:55,380 --> 00:07:57,390 Prendo in quello un po '. 150 00:07:57,390 --> 00:07:59,390 Quindi una cosa importante che viaggi di persone in R 151 00:07:59,390 --> 00:08:01,470 è che non esistono reali, tipi atomici puri. 152 00:08:01,470 --> 00:08:05,870 Non c'è distinzione reale tra un numero, come un valore numerico, 153 00:08:05,870 --> 00:08:07,920 e un elenco di valori numerici. 154 00:08:07,920 --> 00:08:12,370 I valori numerici sono in realtà il stessi delle vettori di lunghezza 1. 155 00:08:12,370 --> 00:08:14,959 E questo ha un certo numero di importanti implicazioni. 156 00:08:14,959 --> 00:08:17,500 Uno, significa che si può fare cose molto facilmente che coinvolgono 157 00:08:17,500 --> 00:08:21,037 come l'aggiunta di un numero per un vettore. 158 00:08:21,037 --> 00:08:23,120 R sarà fondamentalmente figura che cosa si intende con questo. 159 00:08:23,120 --> 00:08:24,610 E io riesco anche a che in un secondo. 160 00:08:24,610 --> 00:08:27,930 Questo significa anche che non c'è modo per il tipo checker-- nella misura 161 00:08:27,930 --> 00:08:30,530 che una cosa del genere esiste in R-- per raccontare 162 00:08:30,530 --> 00:08:33,780 quando hai superato il valore singolo quando si aspetta un array o viceversa. 163 00:08:33,780 --> 00:08:39,159 E che può causare qualche strano problemi che ho incontrato quando 164 00:08:39,159 --> 00:08:42,252 Stavo usando R durante il mio lavoro estivo. 165 00:08:42,252 --> 00:08:43,710 E non ci sono di tipo misto array. 166 00:08:43,710 --> 00:08:46,543 Così non si può avere una matrice sono stati i primi elementi è, non so, 167 00:08:46,543 --> 00:08:49,332 la stringa "John" e la secondo elemento è il numero 42. 168 00:08:49,332 --> 00:08:52,540 Se si tenta di farlo, allora si otterrà tutto solo convertito in una stringa. 169 00:08:52,540 --> 00:08:54,760 Così abbiamo stringa John, string 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Sintattico così insolito features-- più R di sintassi è molto simile a C. 172 00:09:02,025 --> 00:09:04,690 Ci sono alcune importanti differenze. 173 00:09:04,690 --> 00:09:05,620 La digitazione è molto debole. 174 00:09:05,620 --> 00:09:07,360 Quindi non ci sono dichiarazioni di variabili. 175 00:09:07,360 --> 00:09:12,670 Assegnazione utilizza la strana operatore errore inferiore al trattino. 176 00:09:12,670 --> 00:09:15,340 I commenti sono con il carattere cancelletto. 177 00:09:15,340 --> 00:09:19,230 Credo che oggi giorno lo chiamiamo hashtag anche se questo non c'è davvero precisione: 178 00:09:19,230 --> 00:09:21,810 la doppia barra. 179 00:09:21,810 --> 00:09:24,710 >> Residui modulari sono con %% segni. 180 00:09:24,710 --> 00:09:30,172 Divisione intera è con% /% che è molto difficile da leggere quando è proiettato 181 00:09:30,172 --> 00:09:30,880 sullo schermo. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 È possibile ottenere intervalli di interi con i due punti. 184 00:09:37,200 --> 00:09:41,840 Quindi 2,5 vi darà un vettore di tutti i numeri da 2 a 5. 185 00:09:41,840 --> 00:09:44,530 >> Gli array sono uno-indicizzati, che si avvita un sacco di gente 186 00:09:44,530 --> 00:09:47,540 up se sono da più linguaggi di programmazione tipici, 187 00:09:47,540 --> 00:09:50,450 come il C, dove la maggior parte le cose sono zero indicizzati. 188 00:09:50,450 --> 00:09:54,420 Ancora una volta, questo è dove il patrimonio di R come linguaggio per come non 189 00:09:54,420 --> 00:09:56,560 programmatori professionisti viene in. 190 00:09:56,560 --> 00:09:59,680 Se sei un sociologo o un economista o qualcosa 191 00:09:59,680 --> 00:10:01,980 e si sta cercando di utilizzare R fondamentalmente come coadiuvante 192 00:10:01,980 --> 00:10:03,832 al più importante lavoro professionale, 193 00:10:03,832 --> 00:10:06,040 si sta andando a trovare uno-indicizzazione un po 'più naturale. 194 00:10:06,040 --> 00:10:09,890 Perché si cominci a contare a 1 nella vita quotidiana, non 0. 195 00:10:09,890 --> 00:10:13,260 >> Per-loop, questo è simile a il costrutto foreach in PHP, 196 00:10:13,260 --> 00:10:17,090 che si arriva a imparare dentro-- molto presto. 197 00:10:17,090 --> 00:10:22,540 Che è per il valore nel vettore e allora si può fare le cose con il valore. 198 00:10:22,540 --> 00:10:24,040 PUBBLICO: che è venuto in conferenza. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Oh, questo è venire conferenza, eccellente. 200 00:10:26,248 --> 00:10:29,815 PUBBLICO: L'assegnazione, è dovrebbe puntare da destra a sinistra? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: da destra a sinistra, sì. 202 00:10:31,440 --> 00:10:34,720 Si può pensare ad esso come valore su destra spinto nella variabile 203 00:10:34,720 --> 00:10:36,240 sulla sinistra. 204 00:10:36,240 --> 00:10:36,781 PUBBLICO: OK. 205 00:10:36,781 --> 00:10:39,770 206 00:10:39,770 --> 00:10:42,330 >> CONNOR HARRIS: E infine sintassi della funzione è un po 'strano. 207 00:10:42,330 --> 00:10:48,460 Lei ha il nome della funzione foo, assegnato a questa funzione chiave, seguita 208 00:10:48,460 --> 00:10:51,530 da tutti gli argomenti e quindi la corpo della funzione dopo. 209 00:10:51,530 --> 00:10:53,280 Ancora una volta queste cose possono sembrare un po 'strano. 210 00:10:53,280 --> 00:10:57,181 Faranno diventare una seconda natura dopo si lavora con la lingua per un po '. 211 00:10:57,181 --> 00:10:58,930 Così vettori, il modo si costruisce un vettore 212 00:10:58,930 --> 00:11:04,550 si è di tipo C, che è una parola chiave, quindi tutti i numeri desiderati o stringhe 213 00:11:04,550 --> 00:11:06,490 o qualsiasi altra cosa. 214 00:11:06,490 --> 00:11:07,995 Argomenti anche essere vettori. 215 00:11:07,995 --> 00:11:09,620 Ma la matrice risultante viene appiattito. 216 00:11:09,620 --> 00:11:14,385 Così non si può avere array dove alcuni elementi sono numeri singoli 217 00:11:14,385 --> 00:11:17,010 e alcuni elementi sono array stessi. 218 00:11:17,010 --> 00:11:20,010 >> Quindi, se si tenta di costruire un nell'array ha il primo elemento è 4 219 00:11:20,010 --> 00:11:22,370 e il secondo elemento è il 3,5 matrice vi 220 00:11:22,370 --> 00:11:25,890 solo ottenere una matrice di tre elementi, 4,3,5. 221 00:11:25,890 --> 00:11:27,760 Non possono essere di tipo misto. 222 00:11:27,760 --> 00:11:32,290 Se si tenta di leggere o scrivere al di fuori dei limiti di un vettore 223 00:11:32,290 --> 00:11:36,640 si otterrà il valore denominato NA un che sta per un valore mancante. 224 00:11:36,640 --> 00:11:39,900 E questo è destinato come statistici che 225 00:11:39,900 --> 00:11:43,080 stanno lavorando con set di dati incompleti. 226 00:11:43,080 --> 00:11:46,460 >> Se si applica una funzione che dovrebbe per fare solo un numero in un array 227 00:11:46,460 --> 00:11:49,220 allora ciò che si otterrà è, il funzione mappare la matrice. 228 00:11:49,220 --> 00:11:52,130 Quindi, se la funzione diciamo prende un numero e lo restituisce quadrati. 229 00:11:52,130 --> 00:11:58,170 Si applica che alla matrice 2,3,5 Quello che otterrete è la matrice 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> E questo è molto utile perché ti significa 231 00:12:00,010 --> 00:12:03,374 non c'è bisogno di scrivere per anelli per fare cose molto semplici, come l'applicazione 232 00:12:03,374 --> 00:12:05,040 una funzione per tutti i membri di un set di dati. 233 00:12:05,040 --> 00:12:08,557 Che, se si sta lavorando con grande insiemi di dati, si deve fare molto. 234 00:12:08,557 --> 00:12:10,390 Funzioni binarie sono ingresso applicata da ingresso. 235 00:12:10,390 --> 00:12:12,430 Prendo in quello. 236 00:12:12,430 --> 00:12:16,750 È possibile accedere con gli array o vettori con parentesi quadre. 237 00:12:16,750 --> 00:12:22,300 Staffe in modo nome vettore quadrati 1 vi darà il primo elemento. 238 00:12:22,300 --> 00:12:25,510 Nome Vector parentesi quadre 2 vi darà il secondo elemento. 239 00:12:25,510 --> 00:12:27,530 >> È possibile passare un vettore degli indici e sarete 240 00:12:27,530 --> 00:12:29,640 tornare fuori fondamentalmente un fattore secondario. 241 00:12:29,640 --> 00:12:34,990 Così si può fare vettore staffe nome C, 2,4 e si otterrà un vettore contenente 242 00:12:34,990 --> 00:12:38,804 la seconda e la quarta elementi dell'array. 243 00:12:38,804 --> 00:12:40,720 E se si desidera solo una statistica riassuntiva rapido 244 00:12:40,720 --> 00:12:47,529 di un vettore come interquartile gamma, mediana, massimo, qualunque cosa, 245 00:12:47,529 --> 00:12:49,820 si può semplicemente digitare sommario Nome vettore e ottenere che fuori. 246 00:12:49,820 --> 00:12:52,680 Questo non è davvero utile in la programmazione ma se stai giocando 247 00:12:52,680 --> 00:12:55,990 intorno agli insiemi di dati, è a portata di mano. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- fondamentalmente array di dimensione superiore. 249 00:12:58,650 --> 00:13:01,190 Hanno questa sintassi speciale notazione. 250 00:13:01,190 --> 00:13:07,620 Matrix con una serie che ottiene pieno dentro-- dispiace, matrice con i dati, 251 00:13:07,620 --> 00:13:09,780 numero di righe, numero di colonne. 252 00:13:09,780 --> 00:13:13,180 Quando si dispone di alcuni dati, si riempie la matrice fondamentalmente che va verso il basso 253 00:13:13,180 --> 00:13:13,380 primo. 254 00:13:13,380 --> 00:13:14,190 Poi sinistra a destra. 255 00:13:14,190 --> 00:13:15,030 Così, così. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 E R ha costruito in moltiplicazioni matrice, 258 00:13:19,600 --> 00:13:24,310 decomposizione spettrale, diagonalizzazione, un sacco di cose. 259 00:13:24,310 --> 00:13:27,785 Se volete di dimensione superiore array, quindi 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 o qualsiasi altra cosa dimensioni si può fare. 261 00:13:29,410 --> 00:13:34,400 La sintassi è uguale matrice fioca c, allora la lista delle dimensioni. 262 00:13:34,400 --> 00:13:38,620 Quindi, se volete una matrice bidimensionale 4 con dimensioni 4, 7, 8, 9, l'array, 263 00:13:38,620 --> 00:13:45,470 dim uguale c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> È possibile accedere a singoli valori con staffe prima voce comma seconda voce. 265 00:13:51,180 --> 00:13:54,870 È possibile ottenere intere fette di righe o colonne. 266 00:13:54,870 --> 00:13:59,900 Con questa sintassi è incompleta solo remare numero di virgola o colonna virgola 267 00:13:59,900 --> 00:14:00,400 numero. 268 00:14:00,400 --> 00:14:02,874 269 00:14:02,874 --> 00:14:04,540 Così liste sono una sorta di matrice associata. 270 00:14:04,540 --> 00:14:06,360 Hanno la loro sintassi qui. 271 00:14:06,360 --> 00:14:08,320 Ancora una volta non fare freneticamente copiare tutto questo in giù. 272 00:14:08,320 --> 00:14:11,370 Questo è solo così che le persone passando attraverso le diapositive più tardi 273 00:14:11,370 --> 00:14:13,089 avere tutto questo in un bel riferimento. 274 00:14:13,089 --> 00:14:16,130 E questo diventerà una volta molto naturale Io in realtà cammino attraverso le demo. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Quindi elenca un array fondamentalmente associati. 277 00:14:20,920 --> 00:14:27,040 È possibile accedere ai valori di nome della lista, il simbolo del dollaro, chiave. 278 00:14:27,040 --> 00:14:31,370 Quindi, se la vostra lista si chiama foo, allora è possibile accedere in quel modo. 279 00:14:31,370 --> 00:14:37,032 È possibile ottenere un intero coppia chiave-valore passando nell'indice parentesi quadre. 280 00:14:37,032 --> 00:14:39,240 Se si legge da un inesistente chiave, si otterrà nulla. 281 00:14:39,240 --> 00:14:41,150 Non sarà errore. 282 00:14:41,150 --> 00:14:43,590 Il fatto è, R farà come molto con nullo in quanto si può. 283 00:14:43,590 --> 00:14:46,580 E questo può significare che se siete non mi aspettavo di ottenere nulla fuori 284 00:14:46,580 --> 00:14:51,840 di qualche lista di lettura, si otterrà un po ' errori irreversibili più in basso 285 00:14:51,840 --> 00:14:52,620 la linea. 286 00:14:52,620 --> 00:14:54,890 >> Questo è accaduto a me il mio lavoro estivo quando stavo usando R 287 00:14:54,890 --> 00:14:58,410 dove ho cambiato come un certo elenco è stato definito in uno spot 288 00:14:58,410 --> 00:15:05,410 ma non ha modificato in seguito alla codice che legge i valori da esso. 289 00:15:05,410 --> 00:15:10,190 E così quello che è successo è stato che ero la lettura di valori nulli su questo elenco, 290 00:15:10,190 --> 00:15:13,090 passarli in funzioni, ed essendo molto confuso 291 00:15:13,090 --> 00:15:16,000 quando ho visto tutti i tipi di infiniti casuali saltar fuori 292 00:15:16,000 --> 00:15:16,790 in questa funzione. 293 00:15:16,790 --> 00:15:20,730 Perché se si applica certo il massimo o funzioni minime per nulla, 294 00:15:20,730 --> 00:15:22,570 si otterrà valori infiniti fuori. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Frame di dati, sono una sottoclasse di lista. 297 00:15:29,180 --> 00:15:31,170 Ogni valore è un vettore della stessa lunghezza. 298 00:15:31,170 --> 00:15:34,220 E sono utilizzati per la presentazione, fondamentalmente, tabelle di dati. 299 00:15:34,220 --> 00:15:36,175 C'è questa sintassi di inizializzazione. 300 00:15:36,175 --> 00:15:38,800 Questo tutto, ancora una volta, essere molto più chiaro quando si arriva alla demo. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 E la cosa bella frame di dati è che si 303 00:15:44,240 --> 00:15:49,380 può dare i nomi a tutte le colonne e nomi a tutte le righe. 304 00:15:49,380 --> 00:15:53,890 E in modo che rende l'accesso loro un po 'più amichevole. 305 00:15:53,890 --> 00:15:59,130 Anche questo è il modo più funzioni leggere i dati da fogli di calcolo Excel 306 00:15:59,130 --> 00:16:03,820 o da file di testo, per esempio, leggerà nei loro dati. 307 00:16:03,820 --> 00:16:07,555 Metteranno in una sorta di cornice dati. 308 00:16:07,555 --> 00:16:09,680 Così functions-- le funzioni sintassi è un po 'strano. 309 00:16:09,680 --> 00:16:16,160 Ancora una volta è il nome della funzione, assegnare, questa funzione parola chiave e poi 310 00:16:16,160 --> 00:16:17,900 la lista degli argomenti. 311 00:16:17,900 --> 00:16:24,080 Così ci sono alcune cose belle di come funzioni lavorano qui. 312 00:16:24,080 --> 00:16:28,170 Per uno, si può effettivamente assegnare valori di default per alcuni argomenti. 313 00:16:28,170 --> 00:16:32,910 Così si può dire R1 equals-- si può dire foo 314 00:16:32,910 --> 00:16:38,290 è una funzione in cui R1 è uguale a qualcosa Per impostazione predefinita, se l'utente specifica 315 00:16:38,290 --> 00:16:39,090 nessun argomento. 316 00:16:39,090 --> 00:16:41,932 In caso contrario, è ciò che ha messo in. 317 00:16:41,932 --> 00:16:44,140 E questo è molto utile perché un sacco di nostre funzioni 318 00:16:44,140 --> 00:16:47,910 hanno spesso decine o centinaia di argomenti. 319 00:16:47,910 --> 00:16:51,210 Per esempio quelle per la stampa grafici o plotting grafici a dispersione 320 00:16:51,210 --> 00:16:54,430 avere argomenti che controllano tutto dal titolo e l'asse 321 00:16:54,430 --> 00:16:59,512 etichette per il colore delle linee di regressione. 322 00:16:59,512 --> 00:17:01,470 E quindi se non si vuole per rendere le persone specificare 323 00:17:01,470 --> 00:17:04,050 ognuno di questi centinaia di argomenti 324 00:17:04,050 --> 00:17:07,674 controllare ogni singolo aspetto della una trama o una regressione o qualsiasi altra cosa, 325 00:17:07,674 --> 00:17:09,299 è bello avere questi valori predefiniti. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> E allora si può effettivamente scrivere come si è visto di nuovo qui. 328 00:17:19,146 --> 00:17:22,869 O trovare un esempio migliore. 329 00:17:22,869 --> 00:17:28,690 Quando si chiama funzioni si può effettivamente li chiamano con i nomi degli argomenti. 330 00:17:28,690 --> 00:17:33,919 Quindi, ecco un esempio di il costruttore della matrice. 331 00:17:33,919 --> 00:17:34,960 Prende tre argomenti. 332 00:17:34,960 --> 00:17:36,760 Di solito si dispone di dati, che è un vettore. 333 00:17:36,760 --> 00:17:38,920 Avete N fila, che è il numero di righe. 334 00:17:38,920 --> 00:17:41,160 Avete N cols-- numero di colonne. 335 00:17:41,160 --> 00:17:43,920 Il fatto è che se si digita N riga corrisponde a qualunque 336 00:17:43,920 --> 00:17:46,520 e col N è uguale a qualsiasi altra cosa quando si sta chiamando questa funzione, 337 00:17:46,520 --> 00:17:47,770 si può effettivamente li retromarcia. 338 00:17:47,770 --> 00:17:51,590 Così si può mettere prima e N fila col N secondo e non farà alcuna differenza. 339 00:17:51,590 --> 00:17:54,660 Ecco, questo è un po 'bella caratteristica. 340 00:17:54,660 --> 00:17:56,260 >> Ha fatto importazione ed esportazione. 341 00:17:56,260 --> 00:18:00,010 Questo può essere fatto, sostanzialmente. 342 00:18:00,010 --> 00:18:03,816 Ci sono anche strutture per scrivere fuori arbitrario R si oppone a un file binario 343 00:18:03,816 --> 00:18:05,190 e poi leggerli di nuovo in un secondo momento. 344 00:18:05,190 --> 00:18:08,030 Che è utile se si sta facendo una grande sessione di R interattiva 345 00:18:08,030 --> 00:18:12,850 e è necessario salvare le cose molto rapidamente. 346 00:18:12,850 --> 00:18:16,460 Per impostazione predefinita, R ha una directory di lavoro che i file vengono scritti fuori in 347 00:18:16,460 --> 00:18:19,410 e leggere di nuovo in da. 348 00:18:19,410 --> 00:18:22,350 Si può vedere che con getwg, cambiarlo con setdw. 349 00:18:22,350 --> 00:18:25,630 Nulla di particolarmente interessante 350 00:18:25,630 --> 00:18:28,270 >> Così ora i statistiche reali stuff-- regressione multilineare. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Così la sintassi usuale è un po 'complicato. 353 00:18:34,910 --> 00:18:37,260 Il modello è un grande oggetto di fondo. 354 00:18:37,260 --> 00:18:39,910 Esso viene assegnato a LM che è una chiamata di funzione. 355 00:18:39,910 --> 00:18:43,840 Il primo elemento, y x1 tilde più qualunque. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 La mia sintassi: ecco un po 'di confusione. 358 00:18:47,990 --> 00:18:49,490 Sono abbastanza dispiaciuto, questo è il modo standard 359 00:18:49,490 --> 00:18:50,990 che i libri di informatica fanno. 360 00:18:50,990 --> 00:18:54,890 Ma è un po 'strano. 361 00:18:54,890 --> 00:18:58,200 >> Quindi, fondamentalmente, è lm parentesi, prima voce 362 00:18:58,200 --> 00:19:06,730 è variable-- dispiace, dipendente tilde x1 variabile più x2 più 363 00:19:06,730 --> 00:19:10,910 tuttavia molti indipendenti le variabili che avete. 364 00:19:10,910 --> 00:19:14,240 E poi queste possono essere sia vettori, tutti della stessa lunghezza. 365 00:19:14,240 --> 00:19:16,220 Oppure possono essere colonna intestazioni in un frame di dati 366 00:19:16,220 --> 00:19:18,553 che hai appena specificato nel secondo frame di dati argomento. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> È inoltre possibile specificare una formula più complessa 369 00:19:26,380 --> 00:19:31,990 in modo da non dover linearmente regredire una variabile un dipendente, 370 00:19:31,990 --> 00:19:34,440 o un vettore in un vettore preesistente. 371 00:19:34,440 --> 00:19:38,070 Si può fare, per esempio, un Componente vettore y al quadrato più 1 372 00:19:38,070 --> 00:19:42,100 e regredire che contro la log di qualche altro vettore. 373 00:19:42,100 --> 00:19:45,200 È possibile stampare un sommario delle modello con questo comando chiamato 374 00:19:45,200 --> 00:19:48,607 summary-- solo sommario parens modello. 375 00:19:48,607 --> 00:19:50,190 Ancora un'altra cosa vorrei chiarire. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Un'altra cosa che andranno corretti quando le diapositive salire su internet. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Se si desidera solo per il calcolo una semplice correlazione 380 00:20:03,210 --> 00:20:09,170 è possibile utilizzare la correlazione vettore 1 vettore 2 nucleo funzione. 381 00:20:09,170 --> 00:20:11,856 Metodo è di default Correlazioni di Pearson. 382 00:20:11,856 --> 00:20:13,480 Questi sono quelli standard che si possono fare. 383 00:20:13,480 --> 00:20:15,990 C'è anche Spearman e Correlazioni Kendell 384 00:20:15,990 --> 00:20:19,530 che sono certa varietà di correlazione graduatoria. 385 00:20:19,530 --> 00:20:23,600 Beh, non si calcolano prodotto momenti tra i vettori stessi, 386 00:20:23,600 --> 00:20:28,511 ma di rango ordini del vettore. 387 00:20:28,511 --> 00:20:29,510 Spiegherò che più tardi. 388 00:20:29,510 --> 00:20:30,120 >> PUBBLICO: Domanda veloce 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Certo. 390 00:20:30,360 --> 00:20:33,151 >> PUBBLICO: Così, quando sei il calcolo per i semplici correlazioni fanno 391 00:20:33,151 --> 00:20:37,655 si assume che ci sia una statistica importanza per la correlazione? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Non devi farlo. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 Un lm è fondamentalmente solo una macchina. 395 00:20:43,960 --> 00:20:47,690 Ci vorranno due cose e sarà sputare fuori 396 00:20:47,690 --> 00:20:49,770 coefficienti per la retta di regressione. 397 00:20:49,770 --> 00:20:52,310 Riferisce anche di serie errori su tali coefficienti. 398 00:20:52,310 --> 00:20:55,865 E vi dirà, come è il intercettare statisticamente significativo 399 00:20:55,865 --> 00:20:56,740 o differenza da 0. 400 00:20:56,740 --> 00:20:59,400 È la pendenza della migliore curva di adattamento statisticamente 401 00:20:59,400 --> 00:21:01,510 diverso da zero, eccetera. 402 00:21:01,510 --> 00:21:06,260 Così assume nulla, penso è migliore risposta alla tua domanda. 403 00:21:06,260 --> 00:21:07,410 OK. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- così la ragione principale si dovrebbe utilizzare R, come la regressione multilineare. 405 00:21:14,650 --> 00:21:17,320 In pratica tutte le lingue ha qualche struttura per questo. 406 00:21:17,320 --> 00:21:21,365 E la sintassi onestamente di R per regressione è un po 'arcana. 407 00:21:21,365 --> 00:21:22,990 Ma tracciato è dove brilla davvero. 408 00:21:22,990 --> 00:21:28,090 >> La funzione di cavallo di battaglia è trama e richiede due vettori, xe y. 409 00:21:28,090 --> 00:21:33,010 E poi i puntini di sospensione si distingue per un tempo molto gran numero di argomenti opzionali che 410 00:21:33,010 --> 00:21:39,190 controllare tutto, dai titoli a colori di varie linee o punti diversi, 411 00:21:39,190 --> 00:21:40,200 al tipo di trama. 412 00:21:40,200 --> 00:21:42,250 Si può avere dispersione trame o grafici lineari. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [Incomprensibile] 2 vettori della stessa lunghezza. 415 00:21:49,710 --> 00:21:53,780 È possibile far precedere questo Allega frame di dati nello script. 416 00:21:53,780 --> 00:22:01,220 E questo vi permetterà di utilizzare solo colonna intestazioni invece di vettori separati. 417 00:22:01,220 --> 00:22:05,410 È possibile aggiungere le rette più appropriate e locali curve di regressione per il grafico. 418 00:22:05,410 --> 00:22:09,390 >> Questi comandi elencati qui, ab linea e le linee, 419 00:22:09,390 --> 00:22:11,640 Per impostazione predefinita, questi ottenere scritto in finestre pop-up 420 00:22:11,640 --> 00:22:15,560 perché presuppone che si sta utilizzando R in modo interattivo. 421 00:22:15,560 --> 00:22:17,310 Se non sei si può scrivere due file che 422 00:22:17,310 --> 00:22:21,600 sono in realtà qualsiasi formato desiderato. 423 00:22:21,600 --> 00:22:25,410 Spiacente, non ho un errore di battitura Ho appena realizzato. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Se si desidera aprire un altro dispositivo grafica 426 00:22:32,720 --> 00:22:39,200 è possibile utilizzare questa funzione chiamata PNG o JPEG o un sacco di altri formati di immagine. 427 00:22:39,200 --> 00:22:42,319 Ed è possibile scrivere i grafici a qualunque sia il nome del file specificato. 428 00:22:42,319 --> 00:22:45,110 Per annullare che si deve use-- Non ho scritto questo nel slide-- 429 00:22:45,110 --> 00:22:49,650 ma c'è una funzione chiamata dev dot off che non ha argomenti. 430 00:22:49,650 --> 00:22:51,517 >> Poi ci sono strutture per plotting 3D 431 00:22:51,517 --> 00:22:53,350 e per il contorno tracciato se si vuole fare 432 00:22:53,350 --> 00:22:55,700 grafici delle due variabili indipendenti. 433 00:22:55,700 --> 00:22:57,150 Non voglio entrare in queste ora. 434 00:22:57,150 --> 00:22:59,130 >> Ci sono anche alcuni strutture per l'animazione 435 00:22:59,130 --> 00:23:01,300 quelli sono di solito gestito da terzi. 436 00:23:01,300 --> 00:23:06,330 Ho fatto le animazioni con grafici R, ma non ho usato queste terze parti 437 00:23:06,330 --> 00:23:06,940 biblioteche. 438 00:23:06,940 --> 00:23:09,929 Quindi non posso davvero attestare per quanto sono bravi. 439 00:23:09,929 --> 00:23:12,220 Quello che mi raccomando se volete per fare animazioni con R 440 00:23:12,220 --> 00:23:16,480 è che si può scrivere fuori tutti le cornici per le animazioni 441 00:23:16,480 --> 00:23:18,470 e quindi è possibile utilizzare un program-- terzi 442 00:23:18,470 --> 00:23:23,630 quelli tipici sono chiamati FFmpeg o ImageMagick-- cucire 443 00:23:23,630 --> 00:23:26,540 tutti i fotogrammi in una sola animazione. 444 00:23:26,540 --> 00:23:28,380 >> Così il tempo per demo. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Quindi, se si sta utilizzando qualsiasi sistema Unix che è Linux BSD, ma che usa BSD. 447 00:23:37,189 --> 00:23:39,730 OS X aprire una finestra di terminale e tipo R al prompt dei comandi. 448 00:23:39,730 --> 00:23:42,820 Se si dispone di R monolocale o simili, che funziona anche. 449 00:23:42,820 --> 00:23:46,270 Per gli utenti Windows si dovrebbe essere in grado di trovare R nel menu Start. 450 00:23:46,270 --> 00:23:50,390 Si dovrebbe essere chiamato qualcosa come R x64 3 punti qualsiasi. 451 00:23:50,390 --> 00:23:53,110 Aprite che lassù. 452 00:23:53,110 --> 00:23:58,850 >> Così ora lasciatemi aprire una finestra di terminale. 453 00:23:58,850 --> 00:24:02,562 Va bene, la ricerca. 454 00:24:02,562 --> 00:24:03,520 PUBBLICO: Command-Space 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Command-Space, grazie. 456 00:24:06,675 --> 00:24:10,030 Io non lo uso normalmente Mac. 457 00:24:10,030 --> 00:24:13,310 Terminal, mostrano una nuova finestra. 458 00:24:13,310 --> 00:24:18,120 Nuova finestra è impostazioni base, R. Così si dovrebbe ottenere 459 00:24:18,120 --> 00:24:22,230 un messaggio di benvenuto, una cosa del genere. 460 00:24:22,230 --> 00:24:31,060 >> Così sto usando R in modo interattivo. 461 00:24:31,060 --> 00:24:32,719 È anche possibile scrivere script R, naturalmente. 462 00:24:32,719 --> 00:24:34,510 Fondamentalmente script vengono eseguiti esattamente allo stesso modo come 463 00:24:34,510 --> 00:24:40,250 se foste seduti davanti al computer digitando in ogni riga uno alla volta. 464 00:24:40,250 --> 00:24:42,660 Quindi partiamo facendo un vettore. 465 00:24:42,660 --> 00:24:46,230 Una freccia 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 sicuro. 468 00:24:50,050 --> 00:24:51,630 Posso fare la dimensione del carattere più grande. 469 00:24:51,630 --> 00:24:53,030 >> PUBBLICO: Comando-Plus 470 00:24:53,030 --> 00:24:53,650 >> CONNER HARRIS: Command-Plus. 471 00:24:53,650 --> 00:24:54,191 Comando-Plus. 472 00:24:54,191 --> 00:24:57,610 473 00:24:57,610 --> 00:25:00,370 Va bene, come sarebbe? 474 00:25:00,370 --> 00:25:00,870 Buona? 475 00:25:00,870 --> 00:25:01,551 OK. 476 00:25:01,551 --> 00:25:03,300 Quindi cominciamo da dichiarazione di una lista di vettore. 477 00:25:03,300 --> 00:25:08,710 Fare un, freccia, C 1,2,4. 478 00:25:08,710 --> 00:25:11,181 Possiamo vedere una. 479 00:25:11,181 --> 00:25:12,680 Non preoccuparti per la staffa lì. 480 00:25:12,680 --> 00:25:18,590 Le staffe sono quindi se stampare molto lunghi array, siamo in grado di dove siete. 481 00:25:18,590 --> 00:25:26,987 Un esempio sarebbe se mi voglio solo intervallo 2-200. 482 00:25:26,987 --> 00:25:28,820 Se ho stampato un lunga serie, le staffe 483 00:25:28,820 --> 00:25:31,060 stanno solo così posso mantenere traccia di quale indice 484 00:25:31,060 --> 00:25:33,250 siamo in se sto cercando attraverso questo visivamente. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Quindi in ogni caso, abbiamo una. 487 00:25:38,280 --> 00:25:43,326 >> Così ho detto prima che gli array interagiscono molto bene con, per esempio, 488 00:25:43,326 --> 00:25:44,450 operazioni unarie come questo. 489 00:25:44,450 --> 00:25:46,500 Allora, cosa pensi che io sarò ottenere se si digita una più 1? 490 00:25:46,500 --> 00:25:49,630 491 00:25:49,630 --> 00:25:51,140 Sì. 492 00:25:51,140 --> 00:25:54,250 Bene, ora ti farò questo diverso array. 493 00:25:54,250 --> 00:26:01,650 Diciamo b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Allora, cosa ne pensate questo comando fare? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Aggiungere gli elementi. 497 00:26:10,670 --> 00:26:14,950 E così fondamentale che è quello che fa. 498 00:26:14,950 --> 00:26:16,740 Quindi questo è abbastanza conveniente. 499 00:26:16,740 --> 00:26:23,800 Quindi io come su faccio questo. c è, diciamo, 6 volte da 1 a 10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Così che cosa voglio vedere contenuto, cosa ne pensi? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Così tutti multipli di sei. 504 00:26:38,110 --> 00:26:42,170 Ora, che cosa ne pensi succede se faccio questo? 505 00:26:42,170 --> 00:26:48,090 Farò questo un po 'più chiaro, c, c. 506 00:26:48,090 --> 00:26:50,365 Quindi ciò che accade, si fa pensare, se faccio questo? 507 00:26:50,365 --> 00:26:51,488 un plus c. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [Incomprensibile] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> PUBBLICO: o un errore oppure aggiunge solo i primi tre elementi. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Non proprio. 513 00:27:04,510 --> 00:27:05,522 Questo è quello che abbiamo ottenuto. 514 00:27:05,522 --> 00:27:08,910 Quello che succede è un più breve array, una, ottenuto in bici. 515 00:27:08,910 --> 00:27:13,990 Così abbiamo ottenuto 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Già. 517 00:27:15,710 --> 00:27:18,940 E in fondo, è possibile visualizzare questo comportamento prima, una più 1, 518 00:27:18,940 --> 00:27:22,190 come una sottoclasse di questo comportamento, dove la matrice più breve è solo il numero 519 00:27:22,190 --> 00:27:25,410 1, che è una matrice di un elemento. 520 00:27:25,410 --> 00:27:27,740 Ho solo essere dicendo vettore tutto il tempo invece di matrice, 521 00:27:27,740 --> 00:27:30,290 perché è quello che la r la documentazione di solito. 522 00:27:30,290 --> 00:27:33,070 Si tratta di una radicata abitudine c. 523 00:27:33,070 --> 00:27:37,590 >> OK, e così ora abbiamo questo array. 524 00:27:37,590 --> 00:27:38,830 Così abbiamo questo array, c. 525 00:27:38,830 --> 00:27:41,380 Siamo in grado di ottenere sintesi statistiche sui c, sintesi c. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 E questo è bello. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Così ora facciamo alcune cose matrice. 530 00:27:52,670 --> 00:27:56,160 Diciamo che m è una matrice. 531 00:27:56,160 --> 00:27:57,780 Facciamo un tre a tre uno. 532 00:27:57,780 --> 00:28:01,630 Così nrows uguale a 3, e ncols uguale a 3. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 E per i dati diamo fare-- così che cosa pensi che questo sta per fare? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> A destra, è il prossimo. 537 00:28:16,580 --> 00:28:17,970 E 'nrow e nColumn. 538 00:28:17,970 --> 00:28:22,164 539 00:28:22,164 --> 00:28:24,580 Quindi quello che ho fatto è che ho dichiarata matrice tre per tre 540 00:28:24,580 --> 00:28:26,950 e ho passato in un array di nove elementi. 541 00:28:26,950 --> 00:28:30,530 Così il logaritmo di tutte le Elementi da uno a nove. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 E tutti quei valori riempiono il scusate array--? 544 00:28:37,285 --> 00:28:38,660 PUBBLICO: Quelli sono di base 10 registri? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: No, registro è logaritmi naturali, così in base e. 546 00:28:41,284 --> 00:28:44,886 547 00:28:44,886 --> 00:28:47,010 Sì, se si voleva di base 10 log, penso che avresti 548 00:28:47,010 --> 00:28:51,620 per registrare tutto ciò che, diviso per log 10. 549 00:28:51,620 --> 00:28:56,750 E così i dati del [incomprensibile] solo riempie l'array, quindi verso il basso, 550 00:28:56,750 --> 00:28:59,490 poi da sinistra a destra. 551 00:28:59,490 --> 00:29:06,890 E se si voleva fare qualche altro array, diciamo n è matrice. 552 00:29:06,890 --> 00:29:10,317 Facciamo, io non lo so, da 2 a 13. 553 00:29:10,317 --> 00:29:11,900 O Farò qualcosa di più interessante. 554 00:29:11,900 --> 00:29:13,770 Farò 2-4. 555 00:29:13,770 --> 00:29:15,780 nrow è uguale, diciamo, 3. 556 00:29:15,780 --> 00:29:18,992 ncol uguale a 4. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Quindi abbiamo questa. 559 00:29:22,090 --> 00:29:26,130 >> E ora, se vogliamo moltiplicare questi, faremmo volte n per cento per cento, 560 00:29:26,130 --> 00:29:27,680 perché è n. 561 00:29:27,680 --> 00:29:30,234 562 00:29:30,234 --> 00:29:31,400 E abbiamo prodotti di matrice. 563 00:29:31,400 --> 00:29:33,970 564 00:29:33,970 --> 00:29:37,810 In essi modo, hai visto come quando ho dichiarato n, il 2-4 565 00:29:37,810 --> 00:29:43,570 vettore ottenuto pedalato fino si riempie tutto di n? 566 00:29:43,570 --> 00:29:45,710 Se si voleva prendere la decomposizione autovalore, 567 00:29:45,710 --> 00:29:46,960 questo è qualcosa che possiamo fare molto facilmente. 568 00:29:46,960 --> 00:29:47,709 Possiamo fare eigen n. 569 00:29:47,709 --> 00:29:52,290 570 00:29:52,290 --> 00:29:54,600 E così questo è il nostro primo incontro con un elenco. 571 00:29:54,600 --> 00:29:57,000 >> Così Eigen n è una lista con due chiavi. 572 00:29:57,000 --> 00:29:58,430 I valori, che è questa matrice qui. 573 00:29:58,430 --> 00:30:01,030 E vettori, che è questo array qui. 574 00:30:01,030 --> 00:30:08,240 Quindi, se si voleva estrarre, per esempio, questa terza colonna 575 00:30:08,240 --> 00:30:13,080 dalla matrice autovettori, perché gli autovettori sono vettori colonna. 576 00:30:13,080 --> 00:30:24,400 Così possiamo fare eigen vec n simbolo del dollaro vettori, comma 3, del [incomprensibile]. 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 È che, come ci si potrebbe aspettare. 580 00:30:34,100 --> 00:30:39,210 >> Poi dicono n volte volte cento vec. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Così il risultato qui si presenta certamente come se abbiamo preso il terzo autovalore qui, 583 00:30:48,320 --> 00:30:50,390 che corrisponde con il terzo autovettore. 584 00:30:50,390 --> 00:30:53,190 E 'appena moltiplicato tutto questo autovettore, componente-saggio, 585 00:30:53,190 --> 00:30:53,990 dal autovalore. 586 00:30:53,990 --> 00:30:57,760 Ed è quello che ci si aspetterebbe, perché è quello che autovalori sono. 587 00:30:57,760 --> 00:31:00,890 Qualcuno qui non preso algebra lineare? 588 00:31:00,890 --> 00:31:02,530 Un paio di persone, OK. 589 00:31:02,530 --> 00:31:04,030 Basta girare i vostri cervelli fuori per un po '. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 E infatti se prendiamo eigen n I valori simbolo del dollaro 3 volte VEC, 592 00:31:20,720 --> 00:31:21,810 anche ottenere la stessa cosa. 593 00:31:21,810 --> 00:31:24,726 E 'formattato in modo diverso come una riga vector invece di un vettore colonna, 594 00:31:24,726 --> 00:31:25,640 ma grande affare. 595 00:31:25,640 --> 00:31:29,430 596 00:31:29,430 --> 00:31:35,170 E così quelle sono fondamentalmente il bello cose che possiamo fare con le matrici, 597 00:31:35,170 --> 00:31:36,489 liste dimostrato. 598 00:31:36,489 --> 00:31:39,030 Devo dimostrare la bella cose sulle funzioni pure. 599 00:31:39,030 --> 00:31:41,750 >> Quindi cerchiamo di say-- [incomprensibile] la funzione, la chiamata di let 600 00:31:41,750 --> 00:31:51,960 esso func contro la funzione di n n squared-- in realtà, questo non è davvero il migliore. 601 00:31:51,960 --> 00:31:55,632 a, b, un quadrato più b. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Quindi una cosa su funzioni, ancora una volta, sono loro 604 00:32:00,380 --> 00:32:01,963 non hanno bisogno di istruzioni return esplicite. 605 00:32:01,963 --> 00:32:04,250 Così si può solo-- il ultima dichiarazione valutato 606 00:32:04,250 --> 00:32:07,502 sarà la dichiarazione restituito, o il valore restituito. 607 00:32:07,502 --> 00:32:10,460 Quindi, in questo caso, stiamo valutando solo una dichiarazione, un più quadrato b. 608 00:32:10,460 --> 00:32:12,043 Quello sarà il valore di ritorno di default. 609 00:32:12,043 --> 00:32:14,530 Non fa mai male a mettere in restituire valori esplicitamente, 610 00:32:14,530 --> 00:32:16,880 soprattutto se hai a che fare con un funzione di logica molto complicato 611 00:32:16,880 --> 00:32:17,380 flusso. 612 00:32:17,380 --> 00:32:18,450 Ma non ne hanno bisogno. 613 00:32:18,450 --> 00:32:24,890 Così ora possiamo fare func 5, 1, e questo è fondamentalmente ciò che vi aspettereste. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Qualcosa altro che possiamo fare, possiamo effettivamente fare func b 616 00:32:31,270 --> 00:32:33,260 uguale 1, a è uguale 5. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Quindi, se specifichiamo che il numero qui, argomento che va a quale argomento 619 00:32:40,770 --> 00:32:44,680 nella funzione, siamo in grado di capovolgere in giro questi valori ovunque vogliamo. 620 00:32:44,680 --> 00:32:48,405 >> PUBBLICO: C'è una ragione scriverlo con la b 621 00:32:48,405 --> 00:32:52,404 pari anziché utilizzare solo i numeri e la virgola? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Sì, di solito fare questo se si dispone di funzioni 623 00:32:54,820 --> 00:32:58,540 con un sacco di argomenti. 624 00:32:58,540 --> 00:33:00,690 Che potrebbe spesso essere come bandiere che si aveva solo 625 00:33:00,690 --> 00:33:03,130 desidera utilizzare in rare occasioni. 626 00:33:03,130 --> 00:33:06,740 E in questo modo è possibile only-- te può fare riferimento agli argomenti specifici 627 00:33:06,740 --> 00:33:09,110 che si desidera utilizzare valori non predefiniti per, 628 00:33:09,110 --> 00:33:14,470 e non c'è bisogno di scrivere un mazzo di bandiere uguale falso dopo di loro. 629 00:33:14,470 --> 00:33:19,710 O posso scrivere questo nuovo con un valore di default come b è uguale a 2. 630 00:33:19,710 --> 00:33:26,289 E poi ho potuto fare f func, Farò 4, 1 questa volta. 631 00:33:26,289 --> 00:33:28,580 E 17, che è 4 al quadrato più 1, come ci si potrebbe aspettare. 632 00:33:28,580 --> 00:33:34,290 >> Ma ho potuto anche solo chiamare questo con func 4, 633 00:33:34,290 --> 00:33:36,970 e prendo 18, perché Non specificare b. 634 00:33:36,970 --> 00:33:38,550 Così b ottiene il valore predefinito di 2. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, ora, se siete in seguito insieme con la demo, 637 00:33:47,200 --> 00:33:51,010 digitare questa riga al tuo comando spingere e vedere cosa viene in su. 638 00:33:51,010 --> 00:33:52,090 A dire il vero, non farlo. 639 00:33:52,090 --> 00:33:52,590 Digitare questo. 640 00:33:52,590 --> 00:33:57,780 641 00:33:57,780 --> 00:34:01,000 Si dovrebbe ottenere qualcosa di simile. 642 00:34:01,000 --> 00:34:04,780 Così mtcars è costruito nei dati fissato per questa dimostrazione 643 00:34:04,780 --> 00:34:13,550 finalità che viene with-- che viene in di default con la vostra distribuzione r. 644 00:34:13,550 --> 00:34:19,211 Si tratta di una raccolta di statistiche un tema 1974 della rivista Motor Trend 645 00:34:19,211 --> 00:34:20,710 su una serie di modelli diversi di auto. 646 00:34:20,710 --> 00:34:28,270 >> Quindi c'è miglia per gallone, cylinders-- Ho dimenticato come disp è-- cavalli. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Probabilmente. 649 00:34:32,420 --> 00:34:36,920 Se hai appena automobili Google MT, poi uno dei primi risultati 650 00:34:36,920 --> 00:34:38,730 sarà dal documentazione ufficiale r 651 00:34:38,730 --> 00:34:41,080 e spiegherà tutti questi campi di dati. 652 00:34:41,080 --> 00:34:47,020 Così il peso è-- WT è peso della vettura in Ton. 653 00:34:47,020 --> 00:34:48,880 Q sec è il tempo di quarto di miglio. 654 00:34:48,880 --> 00:34:52,409 655 00:34:52,409 --> 00:34:55,850 Così ora siamo in grado di fare alcune cose divertenti su macchine MT è un campo di dati. 656 00:34:55,850 --> 00:35:01,640 >> Così possiamo fare le cose come i nomi di fila, auto mt. 657 00:35:01,640 --> 00:35:05,490 E questo è un elenco di tutte le righe la serie di dati che sono nomi di automobili. 658 00:35:05,490 --> 00:35:10,780 Possiamo fare colnames, automobili mt questo. 659 00:35:10,780 --> 00:35:15,500 Se lo fai automobili mt, sottoindice-numerico, come 2. 660 00:35:15,500 --> 00:35:18,177 abbiamo la seconda colonna di questo, che sarebbe cilindri. 661 00:35:18,177 --> 00:35:19,370 >> PUBBLICO: Che cosa hai fatto? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: Ho digitato mt automobili, staffe e, 663 00:35:21,570 --> 00:35:24,180 che mi ha dato la seconda colonna di automobili mt. 664 00:35:24,180 --> 00:35:34,501 665 00:35:34,501 --> 00:35:38,110 Oppure, se vogliamo una fila, posso digitare mtcars comma 2, per esempio. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Altro turno 2 comma, del genere. 668 00:35:46,390 --> 00:35:48,880 E questo vale anche nella tua linea. 669 00:35:48,880 --> 00:35:54,680 Questo qui dà appena uno colonna, ma colonna come un vettore. 670 00:35:54,680 --> 00:36:04,634 671 00:36:04,634 --> 00:36:06,425 Ho appena realizzato ora dimenticato di manifestare 672 00:36:06,425 --> 00:36:09,150 alcune cose interessanti su vettori che si può fare con gli indici. 673 00:36:09,150 --> 00:36:10,480 Così mi permetta di farlo adesso. 674 00:36:10,480 --> 00:36:17,130 Allora, facciamo c gets-- mettere questo su pause-- 2 volte 1 a 10. 675 00:36:17,130 --> 00:36:21,360 Quindi c è solo andare a essere il vettore da 2 a 20. 676 00:36:21,360 --> 00:36:24,640 Posso prendere elementi come questo, c2. 677 00:36:24,640 --> 00:36:30,942 Posso passare in un vettore in questo modo, mi lascia C-- 678 00:36:30,942 --> 00:36:34,470 usare il nome diverso da c, come vec c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 Fondamentalmente, io sto facendo questo modo non si ottiene 681 00:36:39,340 --> 00:36:45,010 confuso tra c come funzione di costruzione del vettore, 682 00:36:45,010 --> 00:36:48,800 e poi c come un nome di variabile. 683 00:36:48,800 --> 00:36:53,120 Staffe Vec C 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Questo farà di me il quarto, il quinto, e sette elementi dell'array. 685 00:36:56,540 --> 00:37:01,740 Posso fare vec, messo in un negativo indice, come negativo 4. 686 00:37:01,740 --> 00:37:06,500 Che tirarmi fuori questo con il quarto elemento rimosso. 687 00:37:06,500 --> 00:37:10,140 Poi se volevo fare fette, Posso fare vec da 2 a 6. 688 00:37:10,140 --> 00:37:15,480 2 punti 6 è solo un altro vettore, che è 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Sputa fuori quello. 690 00:37:18,230 --> 00:37:20,770 >> Quindi in ogni caso, di nuovo alle auto mt. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Allora, facciamo alcune regressioni. 693 00:37:28,450 --> 00:37:34,240 Diciamo che il modello gets-- facciamo regress-- linearmente Non lo so. 694 00:37:34,240 --> 00:37:41,780 Prima di tutto faccio allegare mtcars, naturalmente. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Così [incomprensibile] LM, cerchiamo di regredire miglia per gallone in peso tilde. 697 00:38:00,010 --> 00:38:03,300 E poi frame di dati è mtcars. 698 00:38:03,300 --> 00:38:06,830 Quindi il modello di sintesi. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, quindi questo sembra un po 'complicato. 701 00:38:15,595 --> 00:38:19,380 Ma in fondo, visto che se cercare di esprimere miglia per gallone 702 00:38:19,380 --> 00:38:23,970 come funzione lineare di peso, poi abbiamo ottenuto questa linea qui, 703 00:38:23,970 --> 00:38:28,730 che intercetta a 37.28. 704 00:38:28,730 --> 00:38:33,830 37.28 sarebbero le miglia teoriche per gallone di una macchina che pesa zero. 705 00:38:33,830 --> 00:38:41,210 E allora per ogni tonnellata supplementare, bussate circa cinque miglia per gallone 706 00:38:41,210 --> 00:38:42,440 fuori di questo. 707 00:38:42,440 --> 00:38:45,120 Entrambi questi coefficienti voi può vedere, gli errori standard lì. 708 00:38:45,120 --> 00:38:47,870 E sono molto statisticamente significante. 709 00:38:47,870 --> 00:38:55,740 >> Quindi possiamo essere molto sicuri di 1 e 10 al negativo 10. 710 00:38:55,740 --> 00:38:59,510 Quindi 1 volte qualcosa al negativo 10, che, se si effettua una macchina più pesante, 711 00:38:59,510 --> 00:39:01,440 avrà peggio miglia per gallone. 712 00:39:01,440 --> 00:39:04,940 713 00:39:04,940 --> 00:39:07,250 Oppure possiamo provare qualche altro modello. 714 00:39:07,250 --> 00:39:09,230 Come invece di regredire questo su peso, 715 00:39:09,230 --> 00:39:12,600 cerchiamo di regredire sul registro di peso, perché forse il peso effettivo 716 00:39:12,600 --> 00:39:15,690 il chilometraggio non è in qualche modo lineare. 717 00:39:15,690 --> 00:39:18,540 >> Questo ci ha dato una r ^ di 0,7528. 718 00:39:18,540 --> 00:39:19,610 Così proviamo questo. 719 00:39:19,610 --> 00:39:21,485 Questa volta facciamo un diversa variabile, anche. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Così sintesi, model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 Va bene, così ancora una volta, abbiamo ottenuto il nostro miglior linea di adattamento qui. 724 00:39:31,390 --> 00:39:36,160 E questo tempo-- questo sta dicendo, fondamentalmente, che ogni volta che si 725 00:39:36,160 --> 00:39:38,090 aumentare il peso di una macchina di un fattore e 726 00:39:38,090 --> 00:39:40,580 si perde questo molte miglia per gallone. 727 00:39:40,580 --> 00:39:43,210 728 00:39:43,210 --> 00:39:50,326 >> E così questa volta il nostro standard residua errore it-- che non importa, davvero. 729 00:39:50,326 --> 00:39:53,540 L'errore standard residuo è fondamentalmente solo l'errore standard 730 00:39:53,540 --> 00:39:57,760 che avete lasciato dopo aver togliere la linea di tendenza. 731 00:39:57,760 --> 00:40:02,805 E il nostro r ^ qui è 0,81, che è un po 'meglio di quello 732 00:40:02,805 --> 00:40:07,640 che avevamo prima, 0,52. 733 00:40:07,640 --> 00:40:09,750 >> E così ora aggiungiamo una termine di questa regressione. 734 00:40:09,750 --> 00:40:13,020 Quindi cerchiamo di regredire miglia per gallone sia sul registro dei pesi 735 00:40:13,020 --> 00:40:21,130 e, facciamo, q miglia, quarto di miglio tempo. 736 00:40:21,130 --> 00:40:26,190 OK, deve avere the-- tutto bene, 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-- dispiace, che cosa? 740 00:40:35,000 --> 00:40:37,000 Fammi chiamare questo qualcosa altro oltre model2. 741 00:40:37,000 --> 00:40:38,000 Fammi chiamare questo model3. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 E così ora possiamo fare sintesi model3. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 E così ancora una volta, questo è fondamentalmente quello che ci si potrebbe aspettare. 746 00:40:49,100 --> 00:40:51,750 Hai intercettare positivo. 747 00:40:51,750 --> 00:40:54,550 L'efficace crescente peso è negativo. 748 00:40:54,550 --> 00:40:58,490 E l'effettiva aumentando il tempo di quarto di miglio 749 00:40:58,490 --> 00:41:02,420 è positivo, ma anche se meno di peso. 750 00:41:02,420 --> 00:41:06,010 Ora intuitivo, è possibile dare un senso questo dicendo pensare a macchine sportive. 751 00:41:06,010 --> 00:41:08,950 C'è una accelerazione molto veloce, brevissimi tempi quarto miglio. 752 00:41:08,950 --> 00:41:13,729 Stanno anche intenzione di utilizzare più gas, considerando che le auto più sensibili sono in corso 753 00:41:13,729 --> 00:41:16,020 di avere l'accelerazione più lento, maggiori tempi di miglio di trimestre, 754 00:41:16,020 --> 00:41:20,890 e utilizzare meno gas ,, così maggiori miglia per gallone. 755 00:41:20,890 --> 00:41:21,390 Grande. 756 00:41:21,390 --> 00:41:23,431 E così ora è il momento di tracciare una cosa del genere. 757 00:41:23,431 --> 00:41:27,810 Quindi cerchiamo di fare-- così nuda ossa possiamo fare plots-- 758 00:41:27,810 --> 00:41:35,280 perché ho attaccato questo frame di dati before-- possiamo semplicemente fare complotti, mpg in peso. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Fanno di questo un po 'più grande. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Lì, abbiamo praticamente abbiamo un scatter plot, ma i punti 763 00:41:57,350 --> 00:41:58,690 sono un po 'difficile da vedere su questo. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Non mi ricordo quello che il offhand sintassi è per cambiare la trama. 766 00:42:10,900 --> 00:42:14,100 Quindi credo che questo sarà un buon momento per far apparire, 767 00:42:14,100 --> 00:42:18,000 c'è un bel aiuto incorporato caratteristica, help citazioni funzionano nome. 768 00:42:18,000 --> 00:42:21,690 Porteremo fino in fondo qualcosa che ti piacerebbe. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Penso che in realtà fare questo tipo uguale p per punti trame. 771 00:42:32,730 --> 00:42:34,369 Ha fatto che cambia nulla? 772 00:42:34,369 --> 00:42:35,160 E no, non proprio. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Tutto ok. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> Per qualche ragione, quando ho fatto questo sul mio computer qualche tempo fa, 777 00:42:49,580 --> 00:42:52,080 tutti i punti di dispersione erano molto più chiara. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 In ogni caso, sono il tipo di dispersione visibile? 780 00:43:13,970 --> 00:43:15,124 Ce n'è uno là. 781 00:43:15,124 --> 00:43:16,165 Alcuni lì, un po 'là. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 Potete sorta di vederli, giusto? 784 00:43:21,185 --> 00:43:24,310 Quindi, se vogliamo aggiungere una retta di regressione a tale grafico, qui, che è un po 'spoglia 785 00:43:24,310 --> 00:43:29,290 bones-- vorrei che fosse un po 'più bello. 786 00:43:29,290 --> 00:43:38,075 È uguale principale contro il peso. 787 00:43:38,075 --> 00:43:46,322 788 00:43:46,322 --> 00:43:49,740 Miglia per gallone. 789 00:43:49,740 --> 00:43:53,570 Anche in questo caso, si può vedere quanto sia utile argomenti opzionali sono qui con anche 790 00:43:53,570 --> 00:43:58,090 Non dover mettere le cose in un certo ordine con argomenti di tastiera 791 00:43:58,090 --> 00:44:01,600 quando si dispone di complotti, perchè questi prendono un sacco di argomenti. 792 00:44:01,600 --> 00:44:07,490 >> Xlab uguale peso, peso, tonnellate. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Tutto ok. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, sì, questo dispositivo è essere un po 'fastidioso. 797 00:44:21,480 --> 00:44:30,160 Ma si può vedere una sorta di lassù, c'è un titolo grafico sul lato. 798 00:44:30,160 --> 00:44:35,260 Qui there's-- sul fondo qui ci sono le etichette degli assi. 799 00:44:35,260 --> 00:44:37,700 Non mi ricordo estemporaneo ciò che i comandi ars-- 800 00:44:37,700 --> 00:44:41,000 quali le funzioni per aumentare le dimensioni di quelle etichette e titoli, 801 00:44:41,000 --> 00:44:43,110 ma sono lì. 802 00:44:43,110 --> 00:44:46,625 >> E così, se vogliamo aggiungere la retta di regressione, 803 00:44:46,625 --> 00:44:49,250 potremmo fare qualcosa like-- I avere la sintassi scritto qui. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Quindi ricordate che basta aggiungere il modello era mpg, peso, mtcars. 806 00:45:11,130 --> 00:45:16,470 E così, se ho voluto aggiungere una misura migliore linea, ho potuto fare un modello riga b. 807 00:45:16,470 --> 00:45:18,556 E boom, abbiamo un migliore curva di adattamento. 808 00:45:18,556 --> 00:45:19,970 È un po 'difficile da vedere di nuovo. 809 00:45:19,970 --> 00:45:22,178 Sono abbastanza dispiaciuto per il difficoltà tecnologiche. 810 00:45:22,178 --> 00:45:25,230 Ma funziona fondamentalmente in alto a sinistra in basso a destra. 811 00:45:25,230 --> 00:45:27,550 >> E se la scala fosse più grande, si poteva vedere 812 00:45:27,550 --> 00:45:31,260 che l'intercetta è quello che si può trovare dalle statistiche riassuntive 813 00:45:31,260 --> 00:45:34,790 se si digita il modello di sintesi. 814 00:45:34,790 --> 00:45:40,130 Ok, quindi spero che tutti si una sorta di senso di ciò che 815 00:45:40,130 --> 00:45:42,030 R è, ciò che è buono per. 816 00:45:42,030 --> 00:45:45,520 Si potrebbe fare trame di gran lunga più bello di questo sul proprio tempo, se volete. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Così la funzione di interfaccia straniera. 819 00:45:53,950 --> 00:46:00,330 Questo è qualcosa che non è in genere coperto di lezioni introduttive 820 00:46:00,330 --> 00:46:03,560 o qualcosa introduttivo per r. 821 00:46:03,560 --> 00:46:05,584 Non è probabile che si sta andando a bisogno. 822 00:46:05,584 --> 00:46:08,000 Tuttavia, ho trovato utile in i miei progetti in passato. 823 00:46:08,000 --> 00:46:10,984 E non c'è nulla di buono tutorial per online. 824 00:46:10,984 --> 00:46:12,900 Così sto solo andando a tutti voi correre attraverso questo 825 00:46:12,900 --> 00:46:16,606 e poi sei libero di andarsene. 826 00:46:16,606 --> 00:46:18,480 E così l'estero interfaccia funzione è ciò che 827 00:46:18,480 --> 00:46:23,130 è possibile utilizzare per chiamare a vedere funzioni con un R. Internamente, 828 00:46:23,130 --> 00:46:29,850 R è costruita su aritmetica di C. R è solo Aritmetica in virgola mobile di C a 64-bit, 829 00:46:29,850 --> 00:46:32,852 che è di tipo double [incomprensibile]. 830 00:46:32,852 --> 00:46:35,060 E si potrebbe desiderare di fare questo per una serie di ragioni. 831 00:46:35,060 --> 00:46:39,250 Per uno, R è interpretato, è Non compilato al codice macchina. 832 00:46:39,250 --> 00:46:42,170 Così si può riscrivere il vostro cicli interni in C e quindi ottenere 833 00:46:42,170 --> 00:46:45,920 il vantaggio di utilizzare R. Come è un po 'più conveniente di C. 834 00:46:45,920 --> 00:46:48,899 Ha migliore grafica strutture e quant'altro. 835 00:46:48,899 --> 00:46:51,690 E pur essendo in grado di ottenere velocità massima dai passanti interni, 836 00:46:51,690 --> 00:46:53,650 che è dove si ha realmente bisogno. 837 00:46:53,650 --> 00:46:56,330 >> Riusare librerie C esistenti, che è anche importante. 838 00:46:56,330 --> 00:47:00,320 Se avete qualche libreria C per come, Non lo so, trasformate di Fourier, 839 00:47:00,320 --> 00:47:05,190 o alcuni molto Archeano Procedura statistiche usato 840 00:47:05,190 --> 00:47:09,470 in alto astrofisica energia o qualcosa del genere, non lo so. 841 00:47:09,470 --> 00:47:13,058 Astrofisica delle alte energie non è nemmeno un think, credo. 842 00:47:13,058 --> 00:47:16,480 Ma si può fare che invece di avere a dare una porta nativa R di loro. 843 00:47:16,480 --> 00:47:22,725 E su the-- e ancora una volta, come se si guardare nella maggior parte delle librerie predefinite di R, 844 00:47:22,725 --> 00:47:25,600 su gli interni, gli interni sono intenzione di utilizzare la funzione di straniero 845 00:47:25,600 --> 00:47:26,724 interfaccia molto ampiamente. 846 00:47:26,724 --> 00:47:31,630 Avranno le cose come Fourier trasforma o di calcolo di correlazione 847 00:47:31,630 --> 00:47:34,890 coefficienti scritte in C, e faranno appena hanno wrapper R intorno a loro. 848 00:47:34,890 --> 00:47:38,230 L'interfaccia è un po 'difficile. credo 849 00:47:38,230 --> 00:47:43,750 la sua difficoltà è esagerato in un molte delle istruzioni che troverete. 850 00:47:43,750 --> 00:47:46,200 Ma comunque, è un po 'di confusione. 851 00:47:46,200 --> 00:47:48,650 E non sono stato in grado di trovare un buon tutorial per esso, 852 00:47:48,650 --> 00:47:51,980 quindi questo è adesso. 853 00:47:51,980 --> 00:47:55,360 Ancora una volta, questo intero segmento è più per riferimento futuro. 854 00:47:55,360 --> 00:47:57,687 Non preoccuparti per la copia tutto giù in questo momento. 855 00:47:57,687 --> 00:48:00,020 Quindi le seguenti istruzioni sono per sistemi Unix-like, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Non lo so come funziona su Windows, 857 00:48:05,150 --> 00:48:08,280 ma per favore basta non fare il tuo progetto definitivo su Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Davvero non si vuole. 860 00:48:12,460 --> 00:48:14,770 Unix è molto meglio insieme up per la programmazione casuale. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Quindi, in sostanza straniera funzione di interfaccia. 863 00:48:21,390 --> 00:48:24,420 Se volete scrivere un C funzione per l'uso con R, 864 00:48:24,420 --> 00:48:27,250 deve prendere tutte le argomenti come puntatori. 865 00:48:27,250 --> 00:48:30,666 >> Così per valori singoli, questo significa che è puntato al valore. 866 00:48:30,666 --> 00:48:33,040 Per array, questo è un puntatore al primo elemento, che 867 00:48:33,040 --> 00:48:36,750 è quello che i nomi di matrice realmente significano. 868 00:48:36,750 --> 00:48:40,140 Ancora una volta, questo è qualcosa che si dovrebbe avere piuttosto totalmente giù dopo p set five. 869 00:48:40,140 --> 00:48:43,334 Nomi di array sono solo puntatori al primo elemento, 870 00:48:43,334 --> 00:48:44,750 Il tipo in virgola mobile è doppia. 871 00:48:44,750 --> 00:48:47,310 E la tua funzione deve restituire void. 872 00:48:47,310 --> 00:48:50,810 L'unico modo che possa effettivamente dire R cosa è successo 873 00:48:50,810 --> 00:48:54,410 è modificando la memoria che R ha dato ad esso attraverso la funzione estere 874 00:48:54,410 --> 00:48:54,910 interfaccia. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Così ho scritto questo esempio qui, questa è 877 00:49:00,127 --> 00:49:02,460 una funzione che calcola uso dot prodotto di due vettori. 878 00:49:02,460 --> 00:49:05,060 Richiede due argomenti, vec1, vec2, che sono i vettori stessi, 879 00:49:05,060 --> 00:49:06,934 e poi n, che è un lunghezza, perché ancora una volta, 880 00:49:06,934 --> 00:49:12,630 R ha costruito in [incomprensibile] per scoprirlo la lunghezza di vettori, ma C no. 881 00:49:12,630 --> 00:49:16,182 In C, i vettori è un arbitrario pezzo delimitato della memoria. 882 00:49:16,182 --> 00:49:17,890 Quindi il modo è possibile calcolare prodotto scalare 883 00:49:17,890 --> 00:49:23,470 è solo impostare questo parametro di a zero e poi scorrere 884 00:49:23,470 --> 00:49:28,760 da 1 a stella n, perché n è un puntatore alla lunghezza, 885 00:49:28,760 --> 00:49:32,929 basta aggiungere qualcosa a questo fuori parametro. 886 00:49:32,929 --> 00:49:34,970 E può essere buona pratica se avete intenzione di fare 887 00:49:34,970 --> 00:49:37,270 questo per scrivere due funzioni C separati. 888 00:49:37,270 --> 00:49:41,970 Uno di loro has-- Uno di loro solo prende gli argomenti e le tipologie 889 00:49:41,970 --> 00:49:43,970 che sarebbero di norma in C. 890 00:49:43,970 --> 00:49:47,780 >> Quindi ci vuole una matrice argomenti come puntatori. 891 00:49:47,780 --> 00:49:57,090 Ma gli argomenti singolo valore come n, ci vuole solo come valori da copiare, 892 00:49:57,090 --> 00:49:57,917 senza puntatori. 893 00:49:57,917 --> 00:49:59,750 E poi non lo fa [Incomprensibile] fuori puntatore. 894 00:49:59,750 --> 00:50:01,290 E allora si può avere un diverso, sostanzialmente, 895 00:50:01,290 --> 00:50:03,623 funzione wrapper che in fondo gestisce i requisiti 896 00:50:03,623 --> 00:50:07,740 della funzione estera Interfaccia per voi. 897 00:50:07,740 --> 00:50:11,840 >> Il modo in cui si chiama questo in R è, una volta avete la vostra funzione scritto in C, 898 00:50:11,840 --> 00:50:17,770 si digita R shlib cmd, R comando di libreria condivisa, 899 00:50:17,770 --> 00:50:20,110 foo punto c, o qualsiasi altra cosa il nome del file è, 900 00:50:20,110 --> 00:50:23,020 e il sistema operativo non shell nel terminale R. 901 00:50:23,020 --> 00:50:25,200 E questo creerà un libreria chiamata foo dot così. 902 00:50:25,200 --> 00:50:28,180 E poi si può caricare in il nostro script o interattivamente 903 00:50:28,180 --> 00:50:32,310 con comando load din punto. 904 00:50:32,310 --> 00:50:35,720 Poi vi è una funzione in R chiamato dot c. 905 00:50:35,720 --> 00:50:39,310 >> Questo richiede argomenti che sono prima il nome della funzione in C 906 00:50:39,310 --> 00:50:40,970 che si desidera chiamare. 907 00:50:40,970 --> 00:50:43,920 E poi tutti i parametri a tale funzione, 908 00:50:43,920 --> 00:50:45,420 devono essere nell'ordine corretto. 909 00:50:45,420 --> 00:50:48,580 Devi usare questo tipo funzioni di coercizione come intero, come 910 00:50:48,580 --> 00:50:52,050 doppio, come carattere, e logico. 911 00:50:52,050 --> 00:50:54,710 E poi, quando ritorna la lista, che è di nuovo solo 912 00:50:54,710 --> 00:50:57,550 una matrice associata del nomi dei parametri e valori 913 00:50:57,550 --> 00:51:00,950 dopo la funzione è stato eseguito. 914 00:51:00,950 --> 00:51:08,520 >> Quindi, in questo caso, perché prod puntino ha argomenti vec1, vec2, e int n, n out. 915 00:51:08,520 --> 00:51:11,980 Per dot c abbiamo prod puntino, il nome della funzione 916 00:51:11,980 --> 00:51:16,250 stiamo chiamando, vec1, vec2, tipo coerce. 917 00:51:16,250 --> 00:51:20,060 La lunghezza di entrambi vettoriale, Ho appena scelto vec1 arbitrariamente. 918 00:51:20,060 --> 00:51:25,479 Sarebbe più robusto per dire s min Lunghezza intero di vec1, lunghezza vec2. 919 00:51:25,479 --> 00:51:27,520 Poi, proprio come doppio zero, perché non lo facciamo davvero 920 00:51:27,520 --> 00:51:29,644 cura ciò che accade nella fuori parametro perché siamo 921 00:51:29,644 --> 00:51:32,270 impostandolo a zero comunque. 922 00:51:32,270 --> 00:51:37,560 >> E poi i risultati stanno per essere un grande gamma associato di fondo 923 00:51:37,560 --> 00:51:42,090 vec1 è qualunque cosa, vec2 è tutto ciò. 924 00:51:42,090 --> 00:51:44,330 Ma siamo interessati a fuori, così possiamo ottenere che fuori. 925 00:51:44,330 --> 00:51:47,780 Anche questo è un esempio giocattolo molto di un'interfaccia funzione estere. 926 00:51:47,780 --> 00:51:54,160 Ma se avete calcolare puntino prodotti di vettori di massa in loop, 927 00:51:54,160 --> 00:51:56,960 o se si deve fare qualcos'altro in un ciclo, 928 00:51:56,960 --> 00:51:59,850 e non si vuole fare affidamento su R, che ha un po 'di overhead 929 00:51:59,850 --> 00:52:02,830 incorporato, questo può essere utile. 930 00:52:02,830 --> 00:52:05,870 >> Ancora una volta, questo non è solitamente un argomento introduttivo a R. 931 00:52:05,870 --> 00:52:08,571 Non è molto ben documentato. 932 00:52:08,571 --> 00:52:11,070 Sto solo includerlo perché L'ho trovato utile in passato. 933 00:52:11,070 --> 00:52:13,654 Pratiche Quindi, le cattive. 934 00:52:13,654 --> 00:52:15,820 Ho detto che ci sia una ciclo for nella funzione. 935 00:52:15,820 --> 00:52:21,150 Generalmente non si dovrebbe, in il linguaggio, lo usa. 936 00:52:21,150 --> 00:52:26,100 Sulla base di quanto R implementa iterazione internamente, può essere lenta. 937 00:52:26,100 --> 00:52:28,540 Hanno appena anche guardare brutto. 938 00:52:28,540 --> 00:52:32,410 >> R gestisce vettori molto bene, così spesso non c'è bisogno di usarlo. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Poi si può di solito sostituire un vettore spesso 941 00:52:38,900 --> 00:52:42,490 con queste funzioni chiamate alto funzioni di ordine, Mappa, Ridurre, 942 00:52:42,490 --> 00:52:44,404 Trova o filtro. 943 00:52:44,404 --> 00:52:46,320 Mi limiterò a dare un po ' esempi di ciò che essi fanno. 944 00:52:46,320 --> 00:52:49,957 Map è una funzione di ordine superiore perché prende una funzione come argomento. 945 00:52:49,957 --> 00:52:52,290 Così si può dare una funzione, si può dare un array, 946 00:52:52,290 --> 00:52:54,640 e si applica la funzione ad ogni elemento dell'array 947 00:52:54,640 --> 00:52:55,681 e restituire il nuovo array. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Ridurre, in pratica si dà è un array, si dà 950 00:53:00,160 --> 00:53:02,930 una funzione che prende due argomenti. 951 00:53:02,930 --> 00:53:07,100 Si applicherà la prima funzione, la primo argomento con un certo valore di avviamento. 952 00:53:07,100 --> 00:53:09,440 Poi a questo risultato nel secondo. 953 00:53:09,440 --> 00:53:12,590 Poi a questo risultato nel terzo, quindi a questo risultato nel quarto. 954 00:53:12,590 --> 00:53:14,870 E poi tornare quando si arriva alla fine. 955 00:53:14,870 --> 00:53:17,620 Così, per esempio, se si desidera calcolare la somma di tutti gli elementi 956 00:53:17,620 --> 00:53:23,240 in una matrice, che si potrebbe chiamare ridurre con [incomprensibile] ridurre un'aggiunta 957 00:53:23,240 --> 00:53:26,620 funzione, come func a, b, restituire a più b. 958 00:53:26,620 --> 00:53:28,960 E quindi avviare un valore pari a 0. 959 00:53:28,960 --> 00:53:32,950 >> E tutto questo, si possono trovare descritti nella documentazione R, 960 00:53:32,950 --> 00:53:35,720 in qualsiasi libro di testo su programmazione funzionale. 961 00:53:35,720 --> 00:53:38,330 C'è anche questa classe di funzioni chiamate si applicano funzioni, 962 00:53:38,330 --> 00:53:42,807 che ho don't-- sono un po 'difficile da spiegare, 963 00:53:42,807 --> 00:53:45,640 ma se si guarda in [incomprensibile] prenotato che ho citato all'inizio, 964 00:53:45,640 --> 00:53:48,615 egli li spiega abbastanza bene in la sua appendice sulla programmazione R. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Più su pratiche, aggiungendo a vettori. 967 00:53:53,390 --> 00:53:57,570 968 00:53:57,570 --> 00:53:58,070 Sì? 969 00:53:58,070 --> 00:54:01,651 970 00:54:01,651 --> 00:54:02,900 Penso che dovrei correggere questo. 971 00:54:02,900 --> 00:54:07,450 In quella prima linea, la freccia vec, che la freccia non dovrebbe essere lì. 972 00:54:07,450 --> 00:54:10,920 È possibile assegnare a un vettore, ancora una volta, per prendere la sua lunghezza più 1 973 00:54:10,920 --> 00:54:13,220 e l'assegnazione di un valore a questo. 974 00:54:13,220 --> 00:54:18,970 Che si estenderà il vettore, o se si può fare Uguale Vec C, newValue vec. 975 00:54:18,970 --> 00:54:21,540 Anche in questo caso, se si utilizza C con un argomento come un vettore, 976 00:54:21,540 --> 00:54:23,300 la gerarchia risultante viene appiattito. 977 00:54:23,300 --> 00:54:27,160 Quindi ti basta avere un vettore che è prorogato di 1. 978 00:54:27,160 --> 00:54:30,410 Non farlo mai. 979 00:54:30,410 --> 00:54:33,330 >> Il motivo per cui si non dovrebbe fare questo è presente. 980 00:54:33,330 --> 00:54:37,430 Quando si assegna un vettore, è dà un certo pezzo di memoria. 981 00:54:37,430 --> 00:54:40,680 Se si aumenta quella dimensione vettore, deve ridistribuire il vettore 982 00:54:40,680 --> 00:54:43,820 altrove. 983 00:54:43,820 --> 00:54:46,980 E così riallocazione è piuttosto costoso. 984 00:54:46,980 --> 00:54:50,530 Non voglio entrare nei dettagli di come ripartitori di memoria sono implementati 985 00:54:50,530 --> 00:54:57,280 sul livello di sistema operativo, ma ci vuole molto tempo 986 00:54:57,280 --> 00:54:58,962 per trovare un nuovo pezzo di memoria. 987 00:54:58,962 --> 00:55:00,920 E anche, se siete ri-assegnazione lotti e lotti 988 00:55:00,920 --> 00:55:03,500 di progressivamente più grandi pezzi, si finisce 989 00:55:03,500 --> 00:55:06,420 con qualcosa chiamato la frammentazione di memoria, 990 00:55:06,420 --> 00:55:09,390 dove la memoria disponibile è diviso in tanti piccoli blocchi 991 00:55:09,390 --> 00:55:11,500 nel punto di vista allocatori memoria. 992 00:55:11,500 --> 00:55:15,340 E diventa sempre più difficile per trovare la memoria per altre cose. 993 00:55:15,340 --> 00:55:19,455 Così, invece, se avete bisogno di fare questo, se è necessario per crescere un vettore da un capo 994 00:55:19,455 --> 00:55:24,240 al successivo, invece di aggiungere ad essa costantemente, si dovrebbe pre-allocare. 995 00:55:24,240 --> 00:55:29,310 Freccia vec, lunghezza del vettore pari a 1.000, o qualsiasi altra cosa. 996 00:55:29,310 --> 00:55:33,200 >> E allora si può solo assegnare per valori uno del vettore 997 00:55:33,200 --> 00:55:36,000 una volta dopo aver assegnato una volta. 998 00:55:36,000 --> 00:55:40,140 Mi sono imbattuto in questo, ancora una volta, il mio lavoro estivo quando stavo scrivendo differenziale NRA 999 00:55:40,140 --> 00:55:42,120 risolutore di equazioni. 1000 00:55:42,120 --> 00:55:43,180 Non simbolica numerica. 1001 00:55:43,180 --> 00:55:49,290 L'idea è che una volta che hai un valore per la soluzione, 1002 00:55:49,290 --> 00:55:51,240 che si utilizza per calcolare il prossimo. 1003 00:55:51,240 --> 00:55:53,700 Quindi il mio naturale ingenuo inclinazione era per dire OK, 1004 00:55:53,700 --> 00:55:56,930 quindi inizierò con un vettore che è un valore sostanziale. 1005 00:55:56,930 --> 00:56:01,260 Calcola da che il valore successivo che va sul mio soluzione vettore, 1006 00:56:01,260 --> 00:56:02,630 e aggiungere che. 1007 00:56:02,630 --> 00:56:05,290 >> Creare qualcosa di diverso, aggiungere che. 1008 00:56:05,290 --> 00:56:08,120 E 'andata molto, molto lentamente. 1009 00:56:08,120 --> 00:56:11,540 E una volta ho capito che questo e ho cambiato il mio sistema 1010 00:56:11,540 --> 00:56:16,020 da aggiungendo a questo vettore come 10.000 a 100.000 volte, 1011 00:56:16,020 --> 00:56:18,910 ad appena pre-assegnazione di un vettore e solo in esecuzione con quello. 1012 00:56:18,910 --> 00:56:22,100 Ho avuto più di 1.000 volte la velocità in su. 1013 00:56:22,100 --> 00:56:26,280 Quindi questo è un molto comune trappola per la programmazione R. 1014 00:56:26,280 --> 00:56:31,560 Se avete bisogno di costruire un vettore pezzo per pezzo, pre-allocare esso. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> Un altro viaggio comune up-- questo è il mio ultimo diapositiva, non problema, la funzione è la gestione degli errori. 1017 00:56:40,240 --> 00:56:42,890 R, ad essere sinceri, non fa davvero fare molto bene. 1018 00:56:42,890 --> 00:56:45,010 Ci sono molti problemi che possono sorgere. 1019 00:56:45,010 --> 00:56:48,360 Ad esempio, se si ottiene una matrice o un vettore di una funzione 1020 00:56:48,360 --> 00:56:52,377 che ti aspettavi un singolo valore provenga da, o viceversa, 1021 00:56:52,377 --> 00:56:55,460 e che si passa in una funzione che hai scritto in attesa di un singolo valore, 1022 00:56:55,460 --> 00:56:57,270 che può essere un problema. 1023 00:56:57,270 --> 00:57:01,440 >> Alcune funzioni restituire null come fanno, per esempio, 1024 00:57:01,440 --> 00:57:05,560 lettura da un chiave inesistente in un elenco. 1025 00:57:05,560 --> 00:57:08,527 Ma nullo non è come C dove se si tenta di leggere 1026 00:57:08,527 --> 00:57:11,360 da un vecchio puntatore, [incomprensibile] null pointer, solo seg difetti 1027 00:57:11,360 --> 00:57:14,109 e se siete nel vostro debugger esso ti dice esattamente dove ti trovi. 1028 00:57:14,109 --> 00:57:17,080 1029 00:57:17,080 --> 00:57:20,772 Invece, nulla sarà fare-- funzioni farà cose imprevedibili 1030 00:57:20,772 --> 00:57:21,730 se sono nulli handed. 1031 00:57:21,730 --> 00:57:24,575 Come se stai consegnato nullo max, ti do infinito negativo. 1032 00:57:24,575 --> 00:57:27,230 1033 00:57:27,230 --> 00:57:28,190 E così, sì. 1034 00:57:28,190 --> 00:57:30,880 1035 00:57:30,880 --> 00:57:32,630 E così questo è accaduto a me una volta quando ho avuto 1036 00:57:32,630 --> 00:57:34,771 cambiato un sacco di campi nella mia struttura lista 1037 00:57:34,771 --> 00:57:37,520 una volta senza cambiare altrove quando leggevo da loro. 1038 00:57:37,520 --> 00:57:40,670 E poi ho avuto ogni sorta di casuale risultati infinity saltar fuori 1039 00:57:40,670 --> 00:57:43,080 e non ho idea di dove sono venuti. 1040 00:57:43,080 --> 00:57:45,310 E purtroppo, non c'è nessuna vera modalità rigorosa R 1041 00:57:45,310 --> 00:57:48,940 dove si può dire se qualcosa sembra che potrebbe essere un errore, 1042 00:57:48,940 --> 00:57:51,960 basta fermarsi lì così posso essere disciplinato e rimediare. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 Tuttavia, c'è qualcosa chiamato arresto se non. 1045 00:57:57,240 --> 00:58:00,480 Ciò equivale ad affermare di C, se hai parlato di questo. 1046 00:58:00,480 --> 00:58:02,690 Non credo C affermare è un argomento conferenza, 1047 00:58:02,690 --> 00:58:06,370 ma il vostro capo sezione potrebbe essere andato su di esso. 1048 00:58:06,370 --> 00:58:10,393 E smettere se non prende in pratica qualsiasi predicato, in modo che qualsiasi affermazione che 1049 00:58:10,393 --> 00:58:11,824 può essere vero o falso. 1050 00:58:11,824 --> 00:58:13,490 E se è falso, si ferma il suo programma. 1051 00:58:13,490 --> 00:58:18,260 Ci dice esattamente quello che la linea erano su e quali condizioni fallito. 1052 00:58:18,260 --> 00:58:21,910 >> E questo molto utile, per esempio, controllo sanità mentale, gli ingressi di funzione. 1053 00:58:21,910 --> 00:58:25,110 Quindi, se avete una funzione e ci si aspetta, ad esempio, 1054 00:58:25,110 --> 00:58:29,640 se mi si dovrebbe dare una data, voglio le date essere solo un vettore di lunghezza 1 1055 00:58:29,640 --> 00:58:31,735 e da qualche parte tra 1 e 31. 1056 00:58:31,735 --> 00:58:34,420 1057 00:58:34,420 --> 00:58:36,170 E se no, lo so qualcosa è andato storto. 1058 00:58:36,170 --> 00:58:40,280 E ho scelto di fermarsi qui prima di questa ha bussare a caso sugli effetti con il codice 1059 00:58:40,280 --> 00:58:44,190 che è più difficile tracciare attraverso. 1060 00:58:44,190 --> 00:58:47,170 Ecco, questo è uno dei possibili utilizzare per l'arresto in caso contrario. 1061 00:58:47,170 --> 00:58:48,660 >> Comunque, OK. 1062 00:58:48,660 --> 00:58:49,690 Ecco, questo è il fine. 1063 00:58:49,690 --> 00:58:51,290 Grazie mille per essere venuti. 1064 00:58:51,290 --> 00:58:53,710 Io sono un dilettante in questo. 1065 00:58:53,710 --> 00:58:57,270 Mi dispiace tanto, se siete annoiati o confuso o quello che hai. 1066 00:58:57,270 --> 00:59:01,670 Sono felice di rispondere alle domande via e-mail a connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Questo vale anche per tutti i gusti guardare questo vivere o in seguito. 1068 00:59:07,230 --> 00:59:10,190 Inoltre, anche se non sono un TF, sono anche molto 1069 00:59:10,190 --> 00:59:13,900 disposti a servire come un non ufficiale consulente per chiunque sia 1070 00:59:13,900 --> 00:59:15,460 R utilizzando in un progetto finale. 1071 00:59:15,460 --> 00:59:19,900 >> Se si desidera che, poi basta parlare con il vostro TF 1072 00:59:19,900 --> 00:59:23,750 e poi scrivimi una mail così So cosa si sta lavorando 1073 00:59:23,750 --> 00:59:26,680 e così posso impostare incontro volte con voi se volete. 1074 00:59:26,680 --> 00:59:27,990 Quindi, di nuovo, vi ringrazio molto. 1075 00:59:27,990 --> 00:59:28,960 Spero che ti sia piaciuto. 1076 00:59:28,960 --> 00:59:29,450 >> PUBBLICO: [incomprensibile]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Certo. 1078 00:59:30,617 --> 00:59:34,910 >> PUBBLICO: Che tipo di progetto sarebbe uno studente di CS utilizzare R per? 1079 00:59:34,910 --> 00:59:37,427 1080 00:59:37,427 --> 00:59:40,510 CONNER HARRIS: Quindi, se non sei fare qualcosa che è esclusivamente in data mining, 1081 00:59:40,510 --> 00:59:43,790 per esempio, e non vi sono un sacco di cose 1082 00:59:43,790 --> 00:59:46,692 si potrebbe fare con quella con i dati estrazione e machine learning. 1083 00:59:46,692 --> 00:59:48,900 Si potrebbe desiderare di utilizzare R per un componente di qualcosa. 1084 00:59:48,900 --> 00:59:52,022 Ho portato su, in origine, l'esempio di se si sta scrivendo un sito web 1085 00:59:52,022 --> 00:59:54,730 e si desidera eseguire automatizzato analisi statistica del server 1086 00:59:54,730 --> 00:59:57,990 i log in un certo tempo ogni giorno, che potrebbe essere qualcosa che è 1087 00:59:57,990 --> 01:00:01,260 molto facile da fare in solo una breve Script in R che è possibile pianificare 1088 01:00:01,260 --> 01:00:04,200 per eseguire ogni notte, per esempio. 1089 01:00:04,200 --> 01:00:06,550 >> E sono sicuro che, se non c'è alcuna ragione che ci si 1090 01:00:06,550 --> 01:00:11,520 vogliono statistiche o capacità grafiche e hanno questo percorso automaticamente invece 1091 01:00:11,520 --> 01:00:13,790 di dover interagire con le cose in Excel, 1092 01:00:13,790 --> 01:00:16,750 per esempio, è già qualcosa si potrebbe desiderare di utilizzare R per. 1093 01:00:16,750 --> 01:00:21,190 Quindi altre domande prima di partire? 1094 01:00:21,190 --> 01:00:21,690 No? 1095 01:00:21,690 --> 01:00:24,960 D'accordo, beh, ancora una volta, grazie molto per la venuta. 1096 01:00:24,960 --> 01:00:29,417