1 00:00:00,000 --> 00:00:05,691 2 00:00:05,691 --> 00:00:07,690 CONNOR HARRIS: Still I pense algum vídeo emocionante 3 00:00:07,690 --> 00:00:12,570 produzido por uma empresa de consultoria profissional que usa R muito em seu trabalho. 4 00:00:12,570 --> 00:00:16,329 >> NARRADOR: O que está por trás das estatísticas, as análises e as visualizações 5 00:00:16,329 --> 00:00:19,770 mais brilhantes cientistas de dados que de hoje e líderes empresariais dependem de 6 00:00:19,770 --> 00:00:22,012 para tomar decisões poderosos? 7 00:00:22,012 --> 00:00:23,540 Você não pode sempre vê-lo. 8 00:00:23,540 --> 00:00:24,790 Mas ele está lá. 9 00:00:24,790 --> 00:00:29,460 Chama-se R, open source r-- o linguagem de programação estatística 10 00:00:29,460 --> 00:00:32,630 que especialistas de dados do mundo sobre o uso para tudo 11 00:00:32,630 --> 00:00:35,350 de mapeamento amplo sociais e tendências de marketing on-line 12 00:00:35,350 --> 00:00:39,210 para o desenvolvimento da financeira e clima modelos que ajudam a conduzir nossas economias 13 00:00:39,210 --> 00:00:40,780 e comunidades. 14 00:00:40,780 --> 00:00:44,910 >> Mas o que exatamente é R e onde R começar? 15 00:00:44,910 --> 00:00:48,620 Bem originalmente, R iniciado aqui com dois professores 16 00:00:48,620 --> 00:00:51,950 que queria uma melhor estatística plataforma para seus alunos. 17 00:00:51,950 --> 00:00:56,030 Então, eles criaram um modelado após a linguagem estatística S. 18 00:00:56,030 --> 00:01:00,480 Eles, junto com muitos outros, continuou trabalhando e usando R, 19 00:01:00,480 --> 00:01:05,489 criação de ferramentas para R e encontrar novas aplicações para R cada dia. 20 00:01:05,489 --> 00:01:07,750 >> Graças a esta é esforço da comunidade mundial, 21 00:01:07,750 --> 00:01:11,850 R continuou crescendo com milhares de bibliotecas criadas pelo usuário construídas 22 00:01:11,850 --> 00:01:15,500 para melhorar a funcionalidade e R validação qualidade crowdsourced 23 00:01:15,500 --> 00:01:19,740 e apoio do mais reconhecido líderes da indústria em todos os campos que 24 00:01:19,740 --> 00:01:25,040 usa R. O que é ótimo, porque R é o melhor no que faz. 25 00:01:25,040 --> 00:01:28,540 Brotando especialistas de forma rápida e facilmente interpretar, interagir com, 26 00:01:28,540 --> 00:01:33,790 e visualizar dados mostrando sua rápida crescente comunidade de usuários em todo o mundo R 27 00:01:33,790 --> 00:01:36,380 e ver como open source R continua a moldar 28 00:01:36,380 --> 00:01:39,340 o futuro da estatística análise e ciência dados. 29 00:01:39,340 --> 00:01:44,660 30 00:01:44,660 --> 00:01:47,710 >> CONNOR HARRIS: OK, ótimo. 31 00:01:47,710 --> 00:01:50,360 Assim, a minha própria apresentação vai ser um pouco mais sóbrio. 32 00:01:50,360 --> 00:01:54,380 Não vai envolver tanto assim música de fundo emocionante. 33 00:01:54,380 --> 00:01:59,160 Mas como você viu no vídeo, R é uma espécie de uma linguagem geral do programa finalidade. 34 00:01:59,160 --> 00:02:03,720 Mas ele foi criado principalmente para o trabalho estatístico. 35 00:02:03,720 --> 00:02:07,980 >> Então, ele é projetado para as estatísticas, para análise de dados, para a mineração de dados. 36 00:02:07,980 --> 00:02:12,420 E assim você pode ver isso em um monte de as opções de design que os fabricantes de R 37 00:02:12,420 --> 00:02:13,320 feito. 38 00:02:13,320 --> 00:02:15,472 Ele foi projetado para em grande parte, pessoas que não são 39 00:02:15,472 --> 00:02:17,930 especialistas em programação, que está apenas pegando programação 40 00:02:17,930 --> 00:02:23,460 no lado para que eles possam fazer o seu trabalho em ciências sociais ou nas estatísticas 41 00:02:23,460 --> 00:02:25,440 como queiras. 42 00:02:25,440 --> 00:02:27,850 >> Ele tem um monte de muito diferenças importantes de C. 43 00:02:27,850 --> 00:02:33,200 Mas a sintaxe e os paradigmas que ele usa são praticamente as mesmas. 44 00:02:33,200 --> 00:02:36,830 E você deve se sentir bonita tanto em casa logo de cara. 45 00:02:36,830 --> 00:02:38,520 É uma linguagem imperativa. 46 00:02:38,520 --> 00:02:40,260 >> Não se preocupe muito com isso se você não souber o termo. 47 00:02:40,260 --> 00:02:42,676 Mas há uma distinção entre imperativo, declarativa, 48 00:02:42,676 --> 00:02:43,810 e funcional. 49 00:02:43,810 --> 00:02:47,600 Imperativo significa apenas que você faça declarações que são basicamente os comandos. 50 00:02:47,600 --> 00:02:52,340 E, em seguida, o interpretador ou o computador segue-os um por um. 51 00:02:52,340 --> 00:02:56,630 É fracamente tipado, existem não há declarações de tipo em R. 52 00:02:56,630 --> 00:02:59,130 >> E depois as linhas entre diferentes tipos 53 00:02:59,130 --> 00:03:03,920 são um pouco mais solto do que eles são em C, por exemplo. 54 00:03:03,920 --> 00:03:06,450 E como eu disse há instalações muito extensas 55 00:03:06,450 --> 00:03:15,610 para elaboração de gráficos, para fins estatísticos análise, para mineração de dados. 56 00:03:15,610 --> 00:03:19,540 Estes são ambos construídos no linguagem e, como disse que o vídeo, 57 00:03:19,540 --> 00:03:23,680 milhares de bibliotecas de terceiros que você pode baixar e utilizar gratuitamente 58 00:03:23,680 --> 00:03:25,340 com condições de licenciamento muito soltas. 59 00:03:25,340 --> 00:03:28,800 60 00:03:28,800 --> 00:03:31,500 >> Assim, em geral, eu recomendaria que você olha para esses dois livros 61 00:03:31,500 --> 00:03:34,610 se você estiver indo para trabalhar em R. One deles é o oficial de R iniciante 62 00:03:34,610 --> 00:03:35,110 guia. 63 00:03:35,110 --> 00:03:38,660 É mantida pela desenvolvedores do núcleo de R. 64 00:03:38,660 --> 00:03:42,400 Você pode baixá-lo novamente, livre de cobrar e legalmente naquele link lá. 65 00:03:42,400 --> 00:03:45,430 66 00:03:45,430 --> 00:03:49,869 Todos esses slides estão a ir na internet, no site CS50 67 00:03:49,869 --> 00:03:50,660 após isso é feito. 68 00:03:50,660 --> 00:03:53,690 Então não há necessidade de copiar coisas para baixo freneticamente. 69 00:03:53,690 --> 00:03:56,800 >> A outra é uma livro por Cosma Shalizi, 70 00:03:56,800 --> 00:04:00,100 que é professor de estatísticas a Carnegie Mellon, chamado Advanced Data 71 00:04:00,100 --> 00:04:02,160 Análise de um Ponto de Vista Elementary. 72 00:04:02,160 --> 00:04:04,010 Esta não é principalmente um livro de R. 73 00:04:04,010 --> 00:04:07,130 É um livro de estatísticas e é um livro de análise de dados. 74 00:04:07,130 --> 00:04:11,990 Mas é muito acessível para pessoas que ter um mínimo de conhecimento de estatísticas. 75 00:04:11,990 --> 00:04:13,750 >> Eu nunca ter tomado um curso formal. 76 00:04:13,750 --> 00:04:17,269 Eu só sei pedaços a partir de vários assuntos afins 77 00:04:17,269 --> 00:04:18,579 que eu tenho feito cursos in. 78 00:04:18,579 --> 00:04:21,839 E eu era capaz de entender perfeitamente bem. 79 00:04:21,839 --> 00:04:25,630 >> Todas as figuras são dadas em R. Eles são feitos em I 80 00:04:25,630 --> 00:04:30,280 e eles também têm listas de código abaixo de cada figura que dizer-lhe 81 00:04:30,280 --> 00:04:33,270 como você faz cada figura com código R. 82 00:04:33,270 --> 00:04:37,400 E isso é muito útil se você está tentando emular 83 00:04:37,400 --> 00:04:38,650 alguma figura que você vê em um livro. 84 00:04:38,650 --> 00:04:47,840 >> E faça o download novamente livre stat.cmu.edu/cshalizi/ Desculpe, 85 00:04:47,840 --> 00:04:50,230 que deve ser cortar cshalizi til. 86 00:04:50,230 --> 00:04:53,150 Eu vou ter certeza de que corrigir quando os slides oficiais subir. 87 00:04:53,150 --> 00:04:57,000 / ADAfaEPoV que é apenas o acrônimo do título do livro. 88 00:04:57,000 --> 00:04:59,850 89 00:04:59,850 --> 00:05:02,500 >> Então geral caveats-- R tem um monte de recursos. 90 00:05:02,500 --> 00:05:05,331 Eu só vou ser capaz de cobrir a superfície de uma série de coisas. 91 00:05:05,331 --> 00:05:08,580 Além disso, a primeira porção do seminário vai ser algo de um despejo de dados. 92 00:05:08,580 --> 00:05:11,437 Estou muito triste com isso. 93 00:05:11,437 --> 00:05:13,770 Basicamente, eu vou apresentá-lo a um monte de coisas 94 00:05:13,770 --> 00:05:15,350 logo de cara, indo o mais rápido possível. 95 00:05:15,350 --> 00:05:17,058 E então nós começamos a a parte divertida, que é 96 00:05:17,058 --> 00:05:20,570 o demo onde eu possa mostrar tudo que nós já conversamos sobre na tela. 97 00:05:20,570 --> 00:05:23,321 E você pode brincar em seu próprio país. 98 00:05:23,321 --> 00:05:26,070 Então lá vai ser um monte de material técnico jogado até aqui. 99 00:05:26,070 --> 00:05:28,060 Não se preocupe em copiar tudo o que para baixo. 100 00:05:28,060 --> 00:05:31,740 Porque A, você pode obter todas as material no site do CS50 mais tarde. 101 00:05:31,740 --> 00:05:37,780 E B, não é realmente tão importante memorizar esta dos slides. 102 00:05:37,780 --> 00:05:40,462 É mais importante que você obtenha alguma facilidade intuitiva com ele 103 00:05:40,462 --> 00:05:44,220 e que vem de apenas brincando. 104 00:05:44,220 --> 00:05:45,720 >> Então, por que usar R? 105 00:05:45,720 --> 00:05:49,440 Basicamente, se você tem um projeto que envolve mineração grandes conjuntos de dados, os dados 106 00:05:49,440 --> 00:05:52,664 visualização, você deve usar R. Se você é 107 00:05:52,664 --> 00:05:55,830 fazendo análises estatísticas complicadas, que seria difícil no Excel, 108 00:05:55,830 --> 00:05:58,010 Por exemplo, seria também ser também boa-- 109 00:05:58,010 --> 00:06:00,506 se você está fazendo estatística análise que é automatizado. 110 00:06:00,506 --> 00:06:02,130 Vamos dizer que você está mantendo um website. 111 00:06:02,130 --> 00:06:06,320 E você quiser ler o log do servidor todos os dias e compilar alguns lista, 112 00:06:06,320 --> 00:06:10,320 como os principais países que seus usuários estão vindo, 113 00:06:10,320 --> 00:06:15,100 algumas estatísticas de resumo sobre quanto tempo eles gastam no seu site ou o que quer. 114 00:06:15,100 --> 00:06:16,910 E você deseja executar este a cada dia. 115 00:06:16,910 --> 00:06:20,280 >> Agora, se você está fazendo isso no Excel, você teria que ir para o seu log do servidor, 116 00:06:20,280 --> 00:06:23,490 importar que em um Planilha de dados do Excel, 117 00:06:23,490 --> 00:06:24,910 executar toda a análise manualmente. 118 00:06:24,910 --> 00:06:27,100 Com R, você pode apenas escrever um script. 119 00:06:27,100 --> 00:06:29,520 Agendá-lo para executar todos os dias a partir de seu sistema operacional. 120 00:06:29,520 --> 00:06:33,657 E, em seguida, todas as noites às 02:00, ou sempre que você programá-lo para ser executado, 121 00:06:33,657 --> 00:06:35,990 ele vai olhar através de seu tráfego de internet para esse dia. 122 00:06:35,990 --> 00:06:39,010 E então, no dia seguinte, você vai ter essa brilhante, novo relatório 123 00:06:39,010 --> 00:06:41,710 ou o que quer que com toda a informações que pediu. 124 00:06:41,710 --> 00:06:44,960 125 00:06:44,960 --> 00:06:50,217 >> Então, basicamente, o R é para Cisco programação versus análise de Cisco. 126 00:06:50,217 --> 00:06:51,050 Preliminar é feito. 127 00:06:51,050 --> 00:06:53,104 Vamos entrar em coisas reais. 128 00:06:53,104 --> 00:06:55,020 Portanto, há três reais tipos na linguagem. 129 00:06:55,020 --> 00:06:56,120 Há tipo numérico. 130 00:06:56,120 --> 00:07:01,250 Há uma espécie de uma diferença entre inteiros e pontos flutuantes, 131 00:07:01,250 --> 00:07:02,769 mas não realmente. 132 00:07:02,769 --> 00:07:04,560 Há um personagem tipo, que é strings. 133 00:07:04,560 --> 00:07:07,100 E há uma lógica tipo, que é Booleans. 134 00:07:07,100 --> 00:07:11,080 >> E você pode converter entre os tipos usando estas funções como numérico, 135 00:07:11,080 --> 00:07:15,220 como personagem, como lógico. 136 00:07:15,220 --> 00:07:17,510 Se você chamar, por exemplo, como numérico em uma corda, 137 00:07:17,510 --> 00:07:20,030 ele vai tentar ler essa seqüência como um número, da mesma maneira 138 00:07:20,030 --> 00:07:25,897 que A2i e scanf fazer, e C. Se você chama como numérico em verdadeiro ou falso 139 00:07:25,897 --> 00:07:26,980 ele irá converter para 1 ou 0. 140 00:07:26,980 --> 00:07:29,110 Se você chamar como personagem em qualquer coisa ele vai 141 00:07:29,110 --> 00:07:32,550 convertê-lo em um representação de cadeia. 142 00:07:32,550 --> 00:07:34,990 >> E depois há os vetores e matrizes. 143 00:07:34,990 --> 00:07:37,580 Assim, os vectores são basicamente 1 matrizes dimensionais. 144 00:07:37,580 --> 00:07:40,600 Eles são o que chamamos de matrizes em C. Matrizes, 2 matrizes dimensionais. 145 00:07:40,600 --> 00:07:42,350 E então maior matrizes dimensionais que você pode 146 00:07:42,350 --> 00:07:48,560 têm 3, 4, 5 dimensões ou o que quer de valores numéricos, de cordas, 147 00:07:48,560 --> 00:07:52,860 valores de lógicas. 148 00:07:52,860 --> 00:07:55,380 >> Você também tem listas que são uma espécie de matriz associativa. 149 00:07:55,380 --> 00:07:57,390 Eu vou entrar nisso um pouco. 150 00:07:57,390 --> 00:07:59,390 Então, uma coisa importante que as viagens de pessoas em R 151 00:07:59,390 --> 00:08:01,470 é que não há reais, tipos atômicos puros. 152 00:08:01,470 --> 00:08:05,870 Não há distinção real entre um número, como um valor numérico, 153 00:08:05,870 --> 00:08:07,920 e uma lista de valores numéricos. 154 00:08:07,920 --> 00:08:12,370 Os valores numéricos são realmente o mesmo que os vectores de comprimento 1. 155 00:08:12,370 --> 00:08:14,959 E isto tem um número de implicações importantes. 156 00:08:14,959 --> 00:08:17,500 Um deles, isso significa que você pode fazer coisas muito facilmente que envolvem 157 00:08:17,500 --> 00:08:21,037 como a adição de um número para um vetor. 158 00:08:21,037 --> 00:08:23,120 R será, basicamente, figura o que você quer dizer com isso. 159 00:08:23,120 --> 00:08:24,610 E eu vou chegar a isso em um segundo. 160 00:08:24,610 --> 00:08:27,930 Isso também significa que não há nenhuma maneira para o tipo, na medida em checker-- 161 00:08:27,930 --> 00:08:30,530 que algo assim existe em r-- para contar 162 00:08:30,530 --> 00:08:33,780 quando você passou no valor único quando se espera uma matriz ou vice-versa. 163 00:08:33,780 --> 00:08:39,159 E isso pode causar algum estranho problemas que eu tive quando 164 00:08:39,159 --> 00:08:42,252 Eu estava usando R durante o meu trabalho de verão. 165 00:08:42,252 --> 00:08:43,710 E não há matrizes de tipo misto. 166 00:08:43,710 --> 00:08:46,543 Então você não pode ter uma matriz foram o primeiros elementos é, eu não sei, 167 00:08:46,543 --> 00:08:49,332 a cadeia "John" ea segundo elemento é o número 42. 168 00:08:49,332 --> 00:08:52,540 Se você tentar fazer isso, então você vai ter tudo apenas convertido para uma cadeia. 169 00:08:52,540 --> 00:08:54,760 Portanto, temos corda John, corda 42. 170 00:08:54,760 --> 00:08:58,250 171 00:08:58,250 --> 00:09:02,025 >> Sintática tão incomum features-- mais de R sintaxe é muito semelhante a C. 172 00:09:02,025 --> 00:09:04,690 Existem algumas diferenças importantes. 173 00:09:04,690 --> 00:09:05,620 A digitação é muito fraco. 174 00:09:05,620 --> 00:09:07,360 Portanto, não há declarações de variáveis. 175 00:09:07,360 --> 00:09:12,670 Atribuição usa o estranho operador de erro inferior a hífen. 176 00:09:12,670 --> 00:09:15,340 Comentários estão com a marca de hash. 177 00:09:15,340 --> 00:09:19,230 Eu acho que hoje em dia chamamos isso hashtag embora isso não é realmente não accurate-- 178 00:09:19,230 --> 00:09:21,810 a barra dupla. 179 00:09:21,810 --> 00:09:24,710 >> Resíduos são modulares com %% sinais. 180 00:09:24,710 --> 00:09:30,172 Divisão inteira é com% /%, o que é muito difícil de ler quando é projetada 181 00:09:30,172 --> 00:09:30,880 up na tela. 182 00:09:30,880 --> 00:09:34,150 183 00:09:34,150 --> 00:09:37,200 Você pode obter intervalos de números inteiros com o cólon. 184 00:09:37,200 --> 00:09:41,840 Assim 2,5 vai lhe dar um vector de todos os números de 2 a 5. 185 00:09:41,840 --> 00:09:44,530 >> Arrays são one-indexados, parafusos que um monte de gente 186 00:09:44,530 --> 00:09:47,540 até se eles estão entre mais linguagens de programação típicos, 187 00:09:47,540 --> 00:09:50,450 como C, onde a maioria as coisas são zero-indexada. 188 00:09:50,450 --> 00:09:54,420 Mais uma vez, este é o lugar onde a herança de R como uma linguagem para como não 189 00:09:54,420 --> 00:09:56,560 programadores profissionais entra. 190 00:09:56,560 --> 00:09:59,680 Se você é um sociólogo ou um economista ou algo 191 00:09:59,680 --> 00:10:01,980 e você está tentando usar R basicamente como adjuvante 192 00:10:01,980 --> 00:10:03,832 ao seu mais importante trabalho profissional, 193 00:10:03,832 --> 00:10:06,040 você vai encontrar one-indexar um pouco mais natural. 194 00:10:06,040 --> 00:10:09,890 Porque você começar a contar a 1 na vida cotidiana, não 0. 195 00:10:09,890 --> 00:10:13,260 >> Para loops, isto é semelhante ao a construção foreach em PHP, 196 00:10:13,260 --> 00:10:17,090 que você vai ter de em-- aprender muito em breve. 197 00:10:17,090 --> 00:10:22,540 Que é para o valor no vetor e em seguida, você pode fazer coisas com valor. 198 00:10:22,540 --> 00:10:24,040 AUDIÊNCIA: Isso é chegar em palestra. 199 00:10:24,040 --> 00:10:26,248 CONNOR HARRIS: Ah, isso é vir para cima conferência, excelente. 200 00:10:26,248 --> 00:10:29,815 AUDIÊNCIA: A atribuição, é deveria apontar de direita para a esquerda? 201 00:10:29,815 --> 00:10:31,440 CONNOR HARRIS: Da direita para a esquerda, sim. 202 00:10:31,440 --> 00:10:34,720 Você pode pensar nisso como o valor em o direito empurrado para a variável 203 00:10:34,720 --> 00:10:36,240 à esquerda. 204 00:10:36,240 --> 00:10:36,781 AUDIÊNCIA: OK. 205 00:10:36,781 --> 00:10:39,770 206 00:10:39,770 --> 00:10:42,330 >> CONNOR HARRIS: E, finalmente, sintaxe da função é um pouco estranho. 207 00:10:42,330 --> 00:10:48,460 Você tem a foo nome da função, atribuída para esta função chave, seguido 208 00:10:48,460 --> 00:10:51,530 por todos os argumentos e, em seguida, o corpo da função após isso. 209 00:10:51,530 --> 00:10:53,280 Novamente, essas coisas podem parece um pouco estranho. 210 00:10:53,280 --> 00:10:57,181 Eles vão se tornar uma segunda natureza depois você trabalha com a linguagem um pouco. 211 00:10:57,181 --> 00:10:58,930 Assim, os vectores, a maneira você construir um vector 212 00:10:58,930 --> 00:11:04,550 é você tipo C, que é uma palavra-chave, em seguida, todos os números desejados ou cordas 213 00:11:04,550 --> 00:11:06,490 como queiras. 214 00:11:06,490 --> 00:11:07,995 Argumentos também ser vetores. 215 00:11:07,995 --> 00:11:09,620 Mas a matriz resultante fica achatada. 216 00:11:09,620 --> 00:11:14,385 Então você não pode ter matrizes onde alguns elementos são números individuais 217 00:11:14,385 --> 00:11:17,010 e alguns elementos são próprias matrizes. 218 00:11:17,010 --> 00:11:20,010 >> Então, se você tentar construir um foram matriz do primeiro elemento é 4 219 00:11:20,010 --> 00:11:22,370 e o segundo elemento é a matriz de 3,5 você 220 00:11:22,370 --> 00:11:25,890 é só pegar uma matriz de três elementos, 4,3,5. 221 00:11:25,890 --> 00:11:27,760 Elas não podem ser de tipo misto. 222 00:11:27,760 --> 00:11:32,290 Se você tentar ler ou escrever fora dos limites de um vetor 223 00:11:32,290 --> 00:11:36,640 você vai ter esse valor chamado NA uma que representa um valor em falta. 224 00:11:36,640 --> 00:11:39,900 E destina-se a esta como estatísticos que 225 00:11:39,900 --> 00:11:43,080 estão trabalhando com conjuntos de dados incompletos. 226 00:11:43,080 --> 00:11:46,460 >> Se você aplicar uma função que deveria para dar apenas um número para uma matriz 227 00:11:46,460 --> 00:11:49,220 então o que você vai ter é, o função irá mapear todo o array. 228 00:11:49,220 --> 00:11:52,130 Então, se a sua função, digamos que leva um número e retorna-lo quadrados. 229 00:11:52,130 --> 00:11:58,170 Você aplicar isso a matriz 2,3,5 O que você vai ter é a matriz 4,9,25. 230 00:11:58,170 --> 00:12:00,010 >> E isso é muito útil porque significa que você 231 00:12:00,010 --> 00:12:03,374 não tem que escrever para loops para fazendo coisas muito simples como aplicar 232 00:12:03,374 --> 00:12:05,040 uma função para todos os membros de um conjunto de dados. 233 00:12:05,040 --> 00:12:08,557 Que se você estiver trabalhando com grande conjuntos de dados, você tem que fazer um monte. 234 00:12:08,557 --> 00:12:10,390 Funções binárias são entrada aplicada pela entrada. 235 00:12:10,390 --> 00:12:12,430 Eu vou entrar nisso. 236 00:12:12,430 --> 00:12:16,750 Você pode acessá-los com matrizes ou vetores com colchetes. 237 00:12:16,750 --> 00:12:22,300 Então suportes nome do vetor quadrados 1 vai lhe dar o primeiro elemento. 238 00:12:22,300 --> 00:12:25,510 Nome do vetor colchetes 2 lhe dará o segundo elemento. 239 00:12:25,510 --> 00:12:27,530 >> Você pode passar um vetor de índices e você vai 240 00:12:27,530 --> 00:12:29,640 voltar para fora, basicamente, um fator de sub. 241 00:12:29,640 --> 00:12:34,990 Assim você pode fazer vetor de nomes de suportes C, 2,4 e você vai sair um vetor contendo 242 00:12:34,990 --> 00:12:38,804 o segundo eo quarto elementos da matriz. 243 00:12:38,804 --> 00:12:40,720 E se você quiser apenas uma rápida estatística resumida 244 00:12:40,720 --> 00:12:47,529 de um vector como interquartile gama, mediana, máximo, seja qual for, 245 00:12:47,529 --> 00:12:49,820 você pode simplesmente digitar resumo nome do vetor e tirar isso. 246 00:12:49,820 --> 00:12:52,680 Isso não é realmente útil em programação, mas se você estiver jogando 247 00:12:52,680 --> 00:12:55,990 em torno dos conjuntos de dados, é útil. 248 00:12:55,990 --> 00:12:58,650 >> Matrices-- basicamente matrizes de dimensões mais elevadas. 249 00:12:58,650 --> 00:13:01,190 Eles têm essa sintaxe especial notação. 250 00:13:01,190 --> 00:13:07,620 Matrix com uma matriz que fica preenchido em-- desculpe, matriz com os dados, 251 00:13:07,620 --> 00:13:09,780 número de linhas, número de colunas. 252 00:13:09,780 --> 00:13:13,180 Quando você tem alguns dados, ele preenche a matriz basicamente vai de cima para baixo 253 00:13:13,180 --> 00:13:13,380 primeiro. 254 00:13:13,380 --> 00:13:14,190 Depois à esquerda para a direita. 255 00:13:14,190 --> 00:13:15,030 Assim, assim. 256 00:13:15,030 --> 00:13:17,809 257 00:13:17,809 --> 00:13:19,600 E R tem construído em multiplicações matriz, 258 00:13:19,600 --> 00:13:24,310 decomposição espectral, diagonalization, um monte de coisas. 259 00:13:24,310 --> 00:13:27,785 Se você quiser maior dimensional matrizes, de modo 3, 4, 5, 260 00:13:27,785 --> 00:13:29,410 ou o que quer dimensões que você pode fazer isso. 261 00:13:29,410 --> 00:13:34,400 A sintaxe é igual a c matriz dim, em seguida, a lista das dimensões. 262 00:13:34,400 --> 00:13:38,620 Então se você quer uma matriz dimensional 4 com dimensões 4, 7, 8, 9, a matriz, 263 00:13:38,620 --> 00:13:45,470 dim é igual a c (4,7,8,9). 264 00:13:45,470 --> 00:13:51,180 >> Você acessar valores individuais com suportes primeira vírgula entrada segunda entrada. 265 00:13:51,180 --> 00:13:54,870 Você pode obter fatias inteiras de linhas ou colunas. 266 00:13:54,870 --> 00:13:59,900 Com esta sintaxe é incompleta apenas remar número vírgula ou coluna vírgula 267 00:13:59,900 --> 00:14:00,400 número. 268 00:14:00,400 --> 00:14:02,874 269 00:14:02,874 --> 00:14:04,540 Assim, as listas são um tipo de matriz associado. 270 00:14:04,540 --> 00:14:06,360 Eles têm a sua própria sintaxe aqui. 271 00:14:06,360 --> 00:14:08,320 Mais uma vez não freneticamente copiar tudo isso para baixo. 272 00:14:08,320 --> 00:14:11,370 Este é apenas para que as pessoas passando os slides mais tarde 273 00:14:11,370 --> 00:14:13,089 ter tudo isso em uma bela referência. 274 00:14:13,089 --> 00:14:16,130 E isso vai se tornar uma vez muito natural Eu realmente andar através dos demos. 275 00:14:16,130 --> 00:14:19,295 276 00:14:19,295 --> 00:14:20,920 Então lista de matrizes basicamente associados. 277 00:14:20,920 --> 00:14:27,040 Você pode acessar os valores com nome da lista, sinal de dólar, chave. 278 00:14:27,040 --> 00:14:31,370 Portanto, se sua lista é nomeada foo, então você pode acessá-lo assim. 279 00:14:31,370 --> 00:14:37,032 Você pode obter um par chave-valor inteiro passando o índice de colchete. 280 00:14:37,032 --> 00:14:39,240 Se você ler a partir de um não-existente chave, você vai ter nulo. 281 00:14:39,240 --> 00:14:41,150 Não será erro. 282 00:14:41,150 --> 00:14:43,590 Coisa é, R vai fazer como muito com nulo, pois ele pode. 283 00:14:43,590 --> 00:14:46,580 E isso pode significar que se você estiver não que esperam para obter nulo fora 284 00:14:46,580 --> 00:14:51,840 de alguma lista de leitura, você vai ter alguns erros imprevisíveis mais abaixo 285 00:14:51,840 --> 00:14:52,620 a linha. 286 00:14:52,620 --> 00:14:54,890 >> Isto aconteceu-me o meu quando trabalho de verão que eu estava usando R 287 00:14:54,890 --> 00:14:58,410 onde eu mudei como um certo lista foi definida em um ponto 288 00:14:58,410 --> 00:15:05,410 mas não se alterou depois da código que ler valores a partir dele. 289 00:15:05,410 --> 00:15:10,190 E então o que aconteceu foi que eu era lendo valores nulos fora desta lista, 290 00:15:10,190 --> 00:15:13,090 passando-os em funções, e ser muito confuso 291 00:15:13,090 --> 00:15:16,000 quando cheguei em todos os tipos de infinidades aleatórios surgindo 292 00:15:16,000 --> 00:15:16,790 nesta função. 293 00:15:16,790 --> 00:15:20,730 Porque se você aplicar determinadas máximo ou funções mínimas para null, 294 00:15:20,730 --> 00:15:22,570 você poderá obter valores infinitos para fora. 295 00:15:22,570 --> 00:15:26,400 296 00:15:26,400 --> 00:15:29,180 >> Os quadros de dados, eles são uma subclasse de lista. 297 00:15:29,180 --> 00:15:31,170 Cada valor é um vetor do mesmo comprimento. 298 00:15:31,170 --> 00:15:34,220 E eles são usados ​​para a apresentação, basicamente, tabelas de dados. 299 00:15:34,220 --> 00:15:36,175 Há essa sintaxe de inicialização. 300 00:15:36,175 --> 00:15:38,800 Isso tudo vai, mais uma vez, ser muito mais claro quando você começa a demo. 301 00:15:38,800 --> 00:15:42,240 302 00:15:42,240 --> 00:15:44,240 E a coisa agradável sobre quadros de dados é que você 303 00:15:44,240 --> 00:15:49,380 pode dar nomes a todas as colunas e nomes para todas as linhas. 304 00:15:49,380 --> 00:15:53,890 E assim que torna o acesso -los um pouco mais voltado. 305 00:15:53,890 --> 00:15:59,130 Também é assim que a maioria das funções que ler dados de planilhas do Excel 306 00:15:59,130 --> 00:16:03,820 ou a partir de arquivos de texto, por exemplo, vai ler em seus dados. 307 00:16:03,820 --> 00:16:07,555 Eles vão colocá-lo em algum tipo de estrutura de dados. 308 00:16:07,555 --> 00:16:09,680 Assim, as funções no funções sintaxe é um pouco estranho. 309 00:16:09,680 --> 00:16:16,160 Novamente, é o nome da função, atribuir, esta função palavra-chave e, em seguida, 310 00:16:16,160 --> 00:16:17,900 a lista de argumentos. 311 00:16:17,900 --> 00:16:24,080 Portanto, há algumas coisas agradáveis sobre como funciona a trabalhar aqui. 312 00:16:24,080 --> 00:16:28,170 Por um lado, você pode realmente atribuir valores padrão para certos argumentos. 313 00:16:28,170 --> 00:16:32,910 Então você pode dizer R1 equals-- você pode dizer foo 314 00:16:32,910 --> 00:16:38,290 é uma função onde R1 é igual a algo por padrão, se o usuário especifica 315 00:16:38,290 --> 00:16:39,090 não há argumentos. 316 00:16:39,090 --> 00:16:41,932 Caso contrário, é tudo o que ele colocou. 317 00:16:41,932 --> 00:16:44,140 E isso é muito útil porque muitas das nossas funções 318 00:16:44,140 --> 00:16:47,910 têm muitas vezes dezenas ou centenas de argumentos. 319 00:16:47,910 --> 00:16:51,210 Por exemplo os de conspirar gráficos ou gráficos de dispersão de plotagem 320 00:16:51,210 --> 00:16:54,430 ter argumentos que controlam tudo a partir do título e do eixo 321 00:16:54,430 --> 00:16:59,512 etiquetas para a cor das linhas de regressão. 322 00:16:59,512 --> 00:17:01,470 E por isso, se você não quer para fazer as pessoas especificar 323 00:17:01,470 --> 00:17:04,050 cada um destes centenas de argumentos 324 00:17:04,050 --> 00:17:07,674 controlar cada aspecto da um terreno ou uma regressão ou o que quer, 325 00:17:07,674 --> 00:17:09,299 é bom ter esses valores padrão. 326 00:17:09,299 --> 00:17:12,700 327 00:17:12,700 --> 00:17:19,146 >> E então você pode realmente escrever como você viu aqui. 328 00:17:19,146 --> 00:17:22,869 Ou encontrar um melhor exemplo. 329 00:17:22,869 --> 00:17:28,690 Quando você chamar funções que você pode realmente chamá-los usando os nomes de argumentos. 330 00:17:28,690 --> 00:17:33,919 Então aqui está um exemplo de o construtor matriz. 331 00:17:33,919 --> 00:17:34,960 Demora três argumentos. 332 00:17:34,960 --> 00:17:36,760 Normalmente você tem dados, que é um vector. 333 00:17:36,760 --> 00:17:38,920 Você tem N linha, que é o número de linhas. 334 00:17:38,920 --> 00:17:41,160 Você tem N cols-- número de colunas. 335 00:17:41,160 --> 00:17:43,920 A coisa é se você digitar N é igual a linha que quer 336 00:17:43,920 --> 00:17:46,520 e N é igual a qualquer que seja quando col você está chamando essa função, 337 00:17:46,520 --> 00:17:47,770 você pode realmente reverter-los. 338 00:17:47,770 --> 00:17:51,590 Então você pode colocar N col primeira fileira e N segunda e vai fazer nenhuma diferença. 339 00:17:51,590 --> 00:17:54,660 Então essa é uma característica pouco agradável. 340 00:17:54,660 --> 00:17:56,260 >> Fez importação e exportação. 341 00:17:56,260 --> 00:18:00,010 Isto pode ser feito, basicamente. 342 00:18:00,010 --> 00:18:03,816 Há também instalações para escrever para fora arbitrária R objetos em um arquivo binário 343 00:18:03,816 --> 00:18:05,190 e, em seguida, lê-los de volta mais tarde. 344 00:18:05,190 --> 00:18:08,030 Que é útil se você está fazendo uma grande sessão de R interativo 345 00:18:08,030 --> 00:18:12,850 e você precisa para salvar coisas muito rapidamente. 346 00:18:12,850 --> 00:18:16,460 Por padrão R tem um diretório de trabalho que os arquivos são escritos para fora 347 00:18:16,460 --> 00:18:19,410 e ler de volta a partir. 348 00:18:19,410 --> 00:18:22,350 Você pode ver que com getwg, alterá-lo com setdw. 349 00:18:22,350 --> 00:18:25,630 Nada especialmente interessante aqui 350 00:18:25,630 --> 00:18:28,270 >> Então, agora as estatísticas reais stuff-- regressão multilinear. 351 00:18:28,270 --> 00:18:30,960 352 00:18:30,960 --> 00:18:34,910 Assim, a sintaxe usual é um pouco complicado. 353 00:18:34,910 --> 00:18:37,260 O modelo é um grande objeto basicamente. 354 00:18:37,260 --> 00:18:39,910 Ele é atribuído a lm, que é uma chamada de função. 355 00:18:39,910 --> 00:18:43,840 O primeiro elemento, a y- x1 til mais o que. 356 00:18:43,840 --> 00:18:46,574 357 00:18:46,574 --> 00:18:47,990 Meu sintaxe aqui é um pouco confuso. 358 00:18:47,990 --> 00:18:49,490 Estou muito triste, isso é a maneira padrão 359 00:18:49,490 --> 00:18:50,990 que os livros de ciência da computação fazer isso. 360 00:18:50,990 --> 00:18:54,890 Mas é um pouco estranho. 361 00:18:54,890 --> 00:18:58,200 >> Então, basicamente, é lm parênteses, primeiro item 362 00:18:58,200 --> 00:19:06,730 é variable-- desculpe, dependente x1 til variável mais x2 mais 363 00:19:06,730 --> 00:19:10,910 porém muitos independente variáveis ​​que você tem. 364 00:19:10,910 --> 00:19:14,240 E, em seguida, estes podem ser tanto vectores, todos o mesmo comprimento. 365 00:19:14,240 --> 00:19:16,220 Ou podem ser coluna cabeçalhos em um quadro de dados 366 00:19:16,220 --> 00:19:18,553 que você acabou de especificar no segundo quadro dados argumento. 367 00:19:18,553 --> 00:19:23,270 368 00:19:23,270 --> 00:19:26,380 >> Você também pode especificar uma fórmula mais complexa 369 00:19:26,380 --> 00:19:31,990 assim você não tem que linearmente regredir uma variável dependente um, 370 00:19:31,990 --> 00:19:34,440 ou um vector num vector preexistente. 371 00:19:34,440 --> 00:19:38,070 Você pode fazer, por exemplo, um componente vector y ao quadrado mais 1 372 00:19:38,070 --> 00:19:42,100 e regredir que contra o log de algum outro vector. 373 00:19:42,100 --> 00:19:45,200 Você pode imprimir os resumos da modelo com este comando chamada 374 00:19:45,200 --> 00:19:48,607 summary-- apenas resumo parens modelo. 375 00:19:48,607 --> 00:19:50,190 Novamente outra coisa que eu deveria esclarecer. 376 00:19:50,190 --> 00:19:55,407 377 00:19:55,407 --> 00:19:58,615 Outra coisa que vai se corrigido quando os slides subir na internet. 378 00:19:58,615 --> 00:20:01,127 379 00:20:01,127 --> 00:20:03,210 Se você quiser apenas para calcular uma correlação simples 380 00:20:03,210 --> 00:20:09,170 você pode usar vector correlação 1 vector 2 função central. 381 00:20:09,170 --> 00:20:11,856 Método é, por padrão Correlações de Pearson. 382 00:20:11,856 --> 00:20:13,480 Esses são os padrões que você pode fazer. 383 00:20:13,480 --> 00:20:15,990 Há também Spearman e Correlações Kendell 384 00:20:15,990 --> 00:20:19,530 que são alguns variedade de correlação ordem de classificação. 385 00:20:19,530 --> 00:20:23,600 Bem, eles não calculam produto momentos entre os próprios vectores, 386 00:20:23,600 --> 00:20:28,511 mas de ordens de classificação do vetor. 387 00:20:28,511 --> 00:20:29,510 Eu vou explicar isso mais tarde. 388 00:20:29,510 --> 00:20:30,120 >> AUDIÊNCIA: Pergunta rápida 389 00:20:30,120 --> 00:20:30,360 >> CONNER HARRIS: Claro. 390 00:20:30,360 --> 00:20:33,151 >> AUDIÊNCIA: Então, quando você está calculando para as correlações simples fazer 391 00:20:33,151 --> 00:20:37,655 você assumir que há uma estatística significância para a correlação? 392 00:20:37,655 --> 00:20:39,030 CONNER HARRIS: Você não tem que. 393 00:20:39,030 --> 00:20:41,840 394 00:20:41,840 --> 00:20:43,960 Um filme é basicamente apenas uma máquina. 395 00:20:43,960 --> 00:20:47,690 Levará em duas coisas e ele vai cuspir 396 00:20:47,690 --> 00:20:49,770 coeficientes para a melhor linha de ajuste. 397 00:20:49,770 --> 00:20:52,310 Ele também relata padrão erros nesses coeficientes. 398 00:20:52,310 --> 00:20:55,865 E ele vai dizer, como é o intercepção estatisticamente significativa 399 00:20:55,865 --> 00:20:56,740 ou a diferença entre 0. 400 00:20:56,740 --> 00:20:59,400 É a inclinação da melhor fit linha estatisticamente 401 00:20:59,400 --> 00:21:01,510 diferente de zero, et cetera. 402 00:21:01,510 --> 00:21:06,260 Por isso, assume nada, eu acho é melhor resposta para sua pergunta. 403 00:21:06,260 --> 00:21:07,410 ESTÁ BEM. 404 00:21:07,410 --> 00:21:14,650 >> Plotting-- assim a razão principal que deveria usar R, como regressão múltipla. 405 00:21:14,650 --> 00:21:17,320 Basicamente todas as línguas tem alguma facilidade para que. 406 00:21:17,320 --> 00:21:21,365 E honestamente sintaxe de R para regressão é um pouco misterioso. 407 00:21:21,365 --> 00:21:22,990 Mas plotagem é o lugar onde ele realmente brilha. 408 00:21:22,990 --> 00:21:28,090 >> A função é laborioso enredo e leva dois vetores, xe y. 409 00:21:28,090 --> 00:21:33,010 E, em seguida, as elipses representa um muito grande número de argumentos opcionais que 410 00:21:33,010 --> 00:21:39,190 controlar tudo a partir de títulos de cores de várias linhas ou vários pontos, 411 00:21:39,190 --> 00:21:40,200 para o tipo de trama. 412 00:21:40,200 --> 00:21:42,250 Você pode ter de dispersão parcelas ou lotes de linha. 413 00:21:42,250 --> 00:21:47,900 414 00:21:47,900 --> 00:21:49,710 >> [Inaudível] 2 vetores do mesmo comprimento. 415 00:21:49,710 --> 00:21:53,780 Você pode preceder esta com anexar quadro de dados em seu script. 416 00:21:53,780 --> 00:22:01,220 E isso permitirá que você acabou de usar coluna cabeçalhos em vez de vectores separados. 417 00:22:01,220 --> 00:22:05,410 Você pode adicionar melhores linhas de ajuste e locais curvas de regressão para o seu gráfico. 418 00:22:05,410 --> 00:22:09,390 >> Estes comandos listada aqui, linha e linhas ab, 419 00:22:09,390 --> 00:22:11,640 Por padrão estes chegar escrito em janelas pop-up 420 00:22:11,640 --> 00:22:15,560 porque ele assume que você está usando R interativamente. 421 00:22:15,560 --> 00:22:17,310 Se você não é possível escrever dois arquivos que 422 00:22:17,310 --> 00:22:21,600 realmente estão em qualquer formato que você gostaria. 423 00:22:21,600 --> 00:22:25,410 Desculpe, eu tenho um erro de digitação Eu só percebi. 424 00:22:25,410 --> 00:22:30,887 425 00:22:30,887 --> 00:22:32,720 Se você deseja abrir outro dispositivo gráfico 426 00:22:32,720 --> 00:22:39,200 você pode usar esta função chamada ou PNG JPEG ou um monte de outros formatos de imagem. 427 00:22:39,200 --> 00:22:42,319 E você pode escrever gráficos para qualquer nome de arquivo que você especificar. 428 00:22:42,319 --> 00:22:45,110 Para cancelar que você tem que use-- Eu não escrevi isso no slide-- 429 00:22:45,110 --> 00:22:49,650 mas há uma função chamada dev dot off que leva sem argumentos. 430 00:22:49,650 --> 00:22:51,517 >> Depois, há instalações para plotagem 3D 431 00:22:51,517 --> 00:22:53,350 e para contorno traçando se você quiser fazer 432 00:22:53,350 --> 00:22:55,700 gráficos de duas variáveis ​​independentes. 433 00:22:55,700 --> 00:22:57,150 Eu não vou entrar nesses agora. 434 00:22:57,150 --> 00:22:59,130 >> Há também alguns são instalações para animação 435 00:22:59,130 --> 00:23:01,300 aqueles são geralmente mantidos por terceiros. 436 00:23:01,300 --> 00:23:06,330 Tenho feito animações com gráficos de P, mas eu não usei esses terceiros 437 00:23:06,330 --> 00:23:06,940 bibliotecas. 438 00:23:06,940 --> 00:23:09,929 Então, eu realmente não posso atestar de como eles são bons. 439 00:23:09,929 --> 00:23:12,220 O que eu recomendo se você quiser para fazer animações usando R 440 00:23:12,220 --> 00:23:16,480 é que você pode escrever para fora todos os quadros para as animações 441 00:23:16,480 --> 00:23:18,470 e então você pode usar um program-- terceiro partido 442 00:23:18,470 --> 00:23:23,630 os típicos são chamados FFmpeg ou ImageMagick-- para costurar 443 00:23:23,630 --> 00:23:26,540 todos os seus quadros em uma animação. 444 00:23:26,540 --> 00:23:28,380 >> Assim, o tempo para demonstração. 445 00:23:28,380 --> 00:23:31,030 446 00:23:31,030 --> 00:23:37,189 Então, se você estiver usando qualquer Unix como sistema que é Linux BSD mas quem usa BSD. 447 00:23:37,189 --> 00:23:39,730 OS X abrir uma janela de terminal e digite R no prompt de comando. 448 00:23:39,730 --> 00:23:42,820 Se você tem R estúdio ou semelhantes, que também funciona. 449 00:23:42,820 --> 00:23:46,270 Para usuários do Windows, você deve ser capaz de encontrar R em seu menu Iniciar. 450 00:23:46,270 --> 00:23:50,390 Ele deve ser chamado algo como R x64 3 pontos que seja. 451 00:23:50,390 --> 00:23:53,110 Abra que lá em cima. 452 00:23:53,110 --> 00:23:58,850 >> Então, agora deixe-me apenas abra uma janela de terminal. 453 00:23:58,850 --> 00:24:02,562 Tudo bem, pesquisa. 454 00:24:02,562 --> 00:24:03,520 AUDIÊNCIA:-Space Command 455 00:24:03,520 --> 00:24:06,675 CONNER HARRIS: Command-Espaço, obrigado. 456 00:24:06,675 --> 00:24:10,030 Eu normalmente não usam Macs. 457 00:24:10,030 --> 00:24:13,310 Terminal, mostrar nova janela. 458 00:24:13,310 --> 00:24:18,120 New window é definições básico, R. Portanto, você deve obter 459 00:24:18,120 --> 00:24:22,230 uma mensagem de boas vindas, algo como isto. 460 00:24:22,230 --> 00:24:31,060 >> Então, eu estou usando R interativamente. 461 00:24:31,060 --> 00:24:32,719 Você também pode escrever roteiros de R curso. 462 00:24:32,719 --> 00:24:34,510 Basicamente scripts são executados exatamente da mesma maneira como 463 00:24:34,510 --> 00:24:40,250 se você estivesse sentado em frente ao computador digitando cada linha de uma de cada vez. 464 00:24:40,250 --> 00:24:42,660 Então, vamos começar por fazer um vetor. 465 00:24:42,660 --> 00:24:46,230 Uma seta 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, claro. 468 00:24:50,050 --> 00:24:51,630 Eu posso fazer o tamanho da fonte maior. 469 00:24:51,630 --> 00:24:53,030 >> AUDIÊNCIA: Command-Plus 470 00:24:53,030 --> 00:24:53,650 >> CONNER HARRIS: Command-Plus. 471 00:24:53,650 --> 00:24:54,191 Command-Plus. 472 00:24:54,191 --> 00:24:57,610 473 00:24:57,610 --> 00:25:00,370 Tudo bem, que tal? 474 00:25:00,370 --> 00:25:00,870 Boa? 475 00:25:00,870 --> 00:25:01,551 ESTÁ BEM. 476 00:25:01,551 --> 00:25:03,300 Então, vamos começar por declarando uma lista vetor. 477 00:25:03,300 --> 00:25:08,710 Fazer, uma seta, C 1,2,4. 478 00:25:08,710 --> 00:25:11,181 Podemos ver a. 479 00:25:11,181 --> 00:25:12,680 Não se preocupe com o suporte de lá. 480 00:25:12,680 --> 00:25:18,590 Os suportes são por isso, se você imprimir matrizes muito longas, podemos onde você está. 481 00:25:18,590 --> 00:25:26,987 Um exemplo seria se eu só quero intervalo 2-200. 482 00:25:26,987 --> 00:25:28,820 Se eu impresso muito longo matriz, os suportes 483 00:25:28,820 --> 00:25:31,060 são apenas para que eu possa manter o controle de qual índice 484 00:25:31,060 --> 00:25:33,250 em que estamos Se eu estou procurando através deste visualmente. 485 00:25:33,250 --> 00:25:36,570 486 00:25:36,570 --> 00:25:38,280 Então, de qualquer forma, temos um. 487 00:25:38,280 --> 00:25:43,326 >> Então eu disse antes que as matrizes de interação muito bem com, por exemplo, 488 00:25:43,326 --> 00:25:44,450 operações unários como este. 489 00:25:44,450 --> 00:25:46,500 Então, o que você acha que eu vou obter se eu digitar um plus 1? 490 00:25:46,500 --> 00:25:49,630 491 00:25:49,630 --> 00:25:51,140 Sim. 492 00:25:51,140 --> 00:25:54,250 Certo, agora eu vou fazer essa matriz diferente. 493 00:25:54,250 --> 00:26:01,650 Digamos b c 20,40, 80. 494 00:26:01,650 --> 00:26:03,400 Então, o que você acha este comando irá fazer? 495 00:26:03,400 --> 00:26:09,962 496 00:26:09,962 --> 00:26:10,670 Adicionar os elementos. 497 00:26:10,670 --> 00:26:14,950 E então basicamente é isso que ele faz. 498 00:26:14,950 --> 00:26:16,740 Então isso é muito conveniente. 499 00:26:16,740 --> 00:26:23,800 Então, eu como sobre eu faço isso. c é, digamos, 6 vezes 1-10. 500 00:26:23,800 --> 00:26:26,789 501 00:26:26,789 --> 00:26:28,830 Então o que eu quero ver contido, que você acha? 502 00:26:28,830 --> 00:26:37,110 503 00:26:37,110 --> 00:26:38,110 Assim, todos múltiplos de seis. 504 00:26:38,110 --> 00:26:42,170 Agora, o que você acha que acontecerá se eu faço isso? 505 00:26:42,170 --> 00:26:48,090 Eu vou fazer isso um pouco mais clara, c, c. 506 00:26:48,090 --> 00:26:50,365 Então o que acontece, você acho que, se eu faço isso? 507 00:26:50,365 --> 00:26:51,488 uma vantagem C. 508 00:26:51,488 --> 00:26:55,550 509 00:26:55,550 --> 00:26:56,050 [INAUDÍVEL] 510 00:26:56,050 --> 00:26:58,552 511 00:26:58,552 --> 00:27:02,350 >> AUDIÊNCIA: Qualquer um erro ou que apenas adiciona os primeiros três elementos. 512 00:27:02,350 --> 00:27:04,510 >> CONNER HARRIS: Não é bem assim. 513 00:27:04,510 --> 00:27:05,522 Isto é o que temos. 514 00:27:05,522 --> 00:27:08,910 O que acontece é um mais curto array, um, tem um ciclo. 515 00:27:08,910 --> 00:27:13,990 Então, nós temos 124, 124, 124. 516 00:27:13,990 --> 00:27:15,710 Sim. 517 00:27:15,710 --> 00:27:18,940 E, basicamente, você pode visualizar este comportamento antes, um plus 1, 518 00:27:18,940 --> 00:27:22,190 como uma subclasse desta comportamento, onde a matriz mais curta é apenas o número 519 00:27:22,190 --> 00:27:25,410 1, que é uma matriz de um elemento. 520 00:27:25,410 --> 00:27:27,740 Eu só estar dizendo vector tudo o tempo, em vez da matriz, 521 00:27:27,740 --> 00:27:30,290 porque é isso que a r documentação normalmente faz. 522 00:27:30,290 --> 00:27:33,070 É um hábito arraigado c. 523 00:27:33,070 --> 00:27:37,590 >> OK, e então agora temos essa matriz. 524 00:27:37,590 --> 00:27:38,830 Portanto, temos essa matriz, c. 525 00:27:38,830 --> 00:27:41,380 Podemos obter resumo estatísticas sobre c, resumo c. 526 00:27:41,380 --> 00:27:46,920 527 00:27:46,920 --> 00:27:48,280 E isso é bom. 528 00:27:48,280 --> 00:27:51,070 529 00:27:51,070 --> 00:27:52,670 Então agora vamos fazer algumas coisas da matriz. 530 00:27:52,670 --> 00:27:56,160 Vamos dizer que é uma matriz m. 531 00:27:56,160 --> 00:27:57,780 Vamos torná-lo um três por três um. 532 00:27:57,780 --> 00:28:01,630 Assim nRows é igual a 3, e ncols é igual a 3. 533 00:28:01,630 --> 00:28:04,190 534 00:28:04,190 --> 00:28:10,710 E para os dados vamos fazer-- então o que você acha que isso vai fazer? 535 00:28:10,710 --> 00:28:15,310 536 00:28:15,310 --> 00:28:16,580 >> Certo, é o próximo. 537 00:28:16,580 --> 00:28:17,970 É nrow e nColumn. 538 00:28:17,970 --> 00:28:22,164 539 00:28:22,164 --> 00:28:24,580 Então o que eu fiz é que eu tenho declarou uma matriz três por três 540 00:28:24,580 --> 00:28:26,950 e eu passei em uma matriz de nove elementos. 541 00:28:26,950 --> 00:28:30,530 Assim, o logaritmo de todo o elementos de um a nove. 542 00:28:30,530 --> 00:28:33,400 543 00:28:33,400 --> 00:28:37,285 E todos esses valores preencher o array-- arrependido? 544 00:28:37,285 --> 00:28:38,660 AUDIÊNCIA: Essas são base 10 registros? 545 00:28:38,660 --> 00:28:41,284 CONNER HARRIS: Não, é log logaritmos naturais, de modo base e. 546 00:28:41,284 --> 00:28:44,886 547 00:28:44,886 --> 00:28:47,010 Sim, se você queria de base 10 log, eu acho que você tem 548 00:28:47,010 --> 00:28:51,620 para registrar o que quer, dividido por log 10. 549 00:28:51,620 --> 00:28:56,750 E assim os dados do [inaudível] apenas enche-se a matriz, de modo de cima para baixo, 550 00:28:56,750 --> 00:28:59,490 depois à esquerda para a direita. 551 00:28:59,490 --> 00:29:06,890 E se você queria fazer alguma outra array, digamos que n é a matriz. 552 00:29:06,890 --> 00:29:10,317 Vamos fazer, eu não sei, 2-13. 553 00:29:10,317 --> 00:29:11,900 Ou eu vou fazer algo mais interessante. 554 00:29:11,900 --> 00:29:13,770 Eu vou fazer 2-4. 555 00:29:13,770 --> 00:29:15,780 nrow é igual a, digamos, três. 556 00:29:15,780 --> 00:29:18,992 Ncol é igual a 4. 557 00:29:18,992 --> 00:29:20,360 n. 558 00:29:20,360 --> 00:29:22,090 Então, nós temos isso. 559 00:29:22,090 --> 00:29:26,130 >> E agora, se queremos multiplicar estes, faríamos vezes n cento por cento, 560 00:29:26,130 --> 00:29:27,680 porque é isso n. 561 00:29:27,680 --> 00:29:30,234 562 00:29:30,234 --> 00:29:31,400 E nós temos produtos de matriz. 563 00:29:31,400 --> 00:29:33,970 564 00:29:33,970 --> 00:29:37,810 Por que maneira, você viu como quando eu declarei n, a 2-4 565 00:29:37,810 --> 00:29:43,570 vector foi pedalando até que encheu todos n? 566 00:29:43,570 --> 00:29:45,710 Se você queria tomar decomposição de valores próprios, 567 00:29:45,710 --> 00:29:46,960 isso é algo que podemos fazer muito facilmente. 568 00:29:46,960 --> 00:29:47,709 Podemos fazer eigen n. 569 00:29:47,709 --> 00:29:52,290 570 00:29:52,290 --> 00:29:54,600 E assim, este é o nosso primeiro deparar com uma lista. 571 00:29:54,600 --> 00:29:57,000 >> Então eigen n é uma lista com duas chaves. 572 00:29:57,000 --> 00:29:58,430 Valores, o que é essa matriz aqui. 573 00:29:58,430 --> 00:30:01,030 E vectores, que é essa matriz aqui. 574 00:30:01,030 --> 00:30:08,240 Então, se você queria extrair, digamos, esta terceira coluna 575 00:30:08,240 --> 00:30:13,080 a partir da matriz de vectores próprios, porque os vectores próprios são vetores coluna. 576 00:30:13,080 --> 00:30:24,400 Então o que podemos fazer eigen vec sinal n dólar vetores, vírgula 3, do [inaudível]. 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 É que, como você poderia esperar. 580 00:30:34,100 --> 00:30:39,210 >> Então diga n vezes vezes por cento VEC. 581 00:30:39,210 --> 00:30:42,610 582 00:30:42,610 --> 00:30:48,320 Assim, o resultado aqui certamente parece se tomássemos o terceiro valor próprio aqui, 583 00:30:48,320 --> 00:30:50,390 que corresponde o terceiro vector próprio. 584 00:30:50,390 --> 00:30:53,190 Ele só multiplicado tudo este eigenvector,-componente sábio, 585 00:30:53,190 --> 00:30:53,990 pelo valor próprio. 586 00:30:53,990 --> 00:30:57,760 E isso é o que seria de esperar, porque é isso que são valores próprios. 587 00:30:57,760 --> 00:31:00,890 Tem alguém aqui não tomado álgebra linear? 588 00:31:00,890 --> 00:31:02,530 Um casal de pessoas, OK. 589 00:31:02,530 --> 00:31:04,030 Basta ligar o seu cérebro fora por um tempo. 590 00:31:04,030 --> 00:31:07,490 591 00:31:07,490 --> 00:31:20,720 E, de fato, se tomarmos eigen n valores sinal de dólar 3 vezes VEC, 592 00:31:20,720 --> 00:31:21,810 bem obter a mesma coisa. 593 00:31:21,810 --> 00:31:24,726 É formatado de forma diferente como uma linha vector, em vez de um vector de coluna, 594 00:31:24,726 --> 00:31:25,640 mas é grande coisa. 595 00:31:25,640 --> 00:31:29,430 596 00:31:29,430 --> 00:31:35,170 E assim esses são basicamente o bom coisas que podemos fazer com matrizes, 597 00:31:35,170 --> 00:31:36,489 listas demonstrados. 598 00:31:36,489 --> 00:31:39,030 I deve demonstrar o bom coisas sobre funções também. 599 00:31:39,030 --> 00:31:41,750 >> Então, vamos dizer-- [inaudível] função, chamada de let 600 00:31:41,750 --> 00:31:51,960 que func contra função n n ao quadrado na verdade, isso não é realmente o melhor. 601 00:31:51,960 --> 00:31:55,632 a, b, um quadrado mais b. 602 00:31:55,632 --> 00:31:58,547 603 00:31:58,547 --> 00:32:00,380 Então, uma coisa sobre funções, de novo, é que eles 604 00:32:00,380 --> 00:32:01,963 não precisa de instruções de retorno explícitos. 605 00:32:01,963 --> 00:32:04,250 Assim, você pode só-- o última declaração avaliado 606 00:32:04,250 --> 00:32:07,502 será devolvido a declaração, ou o valor devolvido. 607 00:32:07,502 --> 00:32:10,460 Portanto, neste caso, estamos avaliando única uma declaração, um quadrado mais b. 608 00:32:10,460 --> 00:32:12,043 Esse será o valor de retorno padrão. 609 00:32:12,043 --> 00:32:14,530 Não custa nada para colocar em devolver valores explicitamente, 610 00:32:14,530 --> 00:32:16,880 especialmente se você está lidando com um função da lógica muito complicado 611 00:32:16,880 --> 00:32:17,380 fluxo. 612 00:32:17,380 --> 00:32:18,450 Mas você não precisa deles. 613 00:32:18,450 --> 00:32:24,890 Então, agora nós podemos fazer func 5, 1, e isso é basicamente o que você esperaria. 614 00:32:24,890 --> 00:32:29,146 615 00:32:29,146 --> 00:32:31,270 Outra coisa que podemos fazer, nós podemos realmente fazer func b 616 00:32:31,270 --> 00:32:33,260 é igual a 1, a é igual a 5. 617 00:32:33,260 --> 00:32:36,870 618 00:32:36,870 --> 00:32:40,770 Então, se nós especificar qual o número aqui, que argumento ao qual argumento 619 00:32:40,770 --> 00:32:44,680 na função, podemos virar em torno esses valores onde quisermos. 620 00:32:44,680 --> 00:32:48,405 >> AUDIÊNCIA: Existe uma razão para escrevê-lo para fora com o b 621 00:32:48,405 --> 00:32:52,404 é igual ao invés de apenas usar os números e a vírgula? 622 00:32:52,404 --> 00:32:54,820 CONNER HARRIS: Sim, normalmente fazer isso se você tiver funções 623 00:32:54,820 --> 00:32:58,540 com um monte de argumentos. 624 00:32:58,540 --> 00:33:00,690 Isso pode muitas vezes ser como bandeiras que você só 625 00:33:00,690 --> 00:33:03,130 deseja usar no raras ocasiões. 626 00:33:03,130 --> 00:33:06,740 E desta forma você pode only-- você pode referir-se aos argumentos específicos 627 00:33:06,740 --> 00:33:09,110 que você deseja usar valores não-padrão para, 628 00:33:09,110 --> 00:33:14,470 e você não tem que escrever um bando de bandeiras é igual a false depois deles. 629 00:33:14,470 --> 00:33:19,710 Ou eu posso escrever isso de novo com um valor padrão como b é igual a 2. 630 00:33:19,710 --> 00:33:26,289 E então eu poderia fazer f func, Eu vou fazer 4, 1 neste momento. 631 00:33:26,289 --> 00:33:28,580 E 17, que é 4 quadrado mais 1, como se poderia esperar. 632 00:33:28,580 --> 00:33:34,290 >> Mas eu também poderia apenas chamar esta com func 4, 633 00:33:34,290 --> 00:33:36,970 e eu vou ficar 18, porque Eu não especificar b. 634 00:33:36,970 --> 00:33:38,550 Então b recebe o valor padrão de 2. 635 00:33:38,550 --> 00:33:41,700 636 00:33:41,700 --> 00:33:47,200 >> OK, então agora se você estiver a seguir, juntamente com o demo, 637 00:33:47,200 --> 00:33:51,010 digite esta linha no seu comando solicitar e ver o que surge. 638 00:33:51,010 --> 00:33:52,090 Na verdade, não faça isso. 639 00:33:52,090 --> 00:33:52,590 Escreva isso. 640 00:33:52,590 --> 00:33:57,780 641 00:33:57,780 --> 00:34:01,000 Você deve obter algo como isto. 642 00:34:01,000 --> 00:34:04,780 Então mtcars é um construído em dados definir para esta demonstração 643 00:34:04,780 --> 00:34:13,550 fins que vem com-- que vem por padrão com a sua distribuição r. 644 00:34:13,550 --> 00:34:19,211 Esta é uma compilação das estatísticas de uma edição da revista Motor Trend 1974 645 00:34:19,211 --> 00:34:20,710 sobre uma série de diferentes modelos de carros. 646 00:34:20,710 --> 00:34:28,270 >> Portanto, há milhas por galão, cylinders-- Eu esqueço o que disp é-- cavalos de potência. 647 00:34:28,270 --> 00:34:31,610 648 00:34:31,610 --> 00:34:32,420 Provavelmente. 649 00:34:32,420 --> 00:34:36,920 Se você acabou de carros Google MT, em seguida, um dos primeiros resultados 650 00:34:36,920 --> 00:34:38,730 será a partir da documentação oficial r 651 00:34:38,730 --> 00:34:41,080 e vai explicar todos esses campos de dados. 652 00:34:41,080 --> 00:34:47,020 Portanto, o peso é-- peso é peso do carro em toneladas. 653 00:34:47,020 --> 00:34:48,880 Q sec é o tempo de quarto de milha. 654 00:34:48,880 --> 00:34:52,409 655 00:34:52,409 --> 00:34:55,850 Então, agora nós podemos fazer algumas coisas divertidas sobre carros MT é um campo de dados. 656 00:34:55,850 --> 00:35:01,640 >> Assim, podemos fazer coisas como nomes de linha, carros mt. 657 00:35:01,640 --> 00:35:05,490 E esta é uma lista de todas as linhas em o conjunto de dados que são nomes de carros. 658 00:35:05,490 --> 00:35:10,780 Podemos fazer COLNAMES, carros mt esta. 659 00:35:10,780 --> 00:35:15,500 Se você fizer carros MT, índice de sub-numérica, como 2. 660 00:35:15,500 --> 00:35:18,177 ficamos com a segunda coluna de este, que seria cilindros. 661 00:35:18,177 --> 00:35:19,370 >> AUDIÊNCIA: O que você fez? 662 00:35:19,370 --> 00:35:21,570 >> CONNER HARRIS: Eu digitei mt carros, suportes e, 663 00:35:21,570 --> 00:35:24,180 o que me deu o segundo coluna de carros mt. 664 00:35:24,180 --> 00:35:34,501 665 00:35:34,501 --> 00:35:38,110 Ou, se quisermos uma linha, eu posso digitar mtcars vírgula 2, por exemplo. 666 00:35:38,110 --> 00:35:41,850 667 00:35:41,850 --> 00:35:46,390 Outro round 2 vírgula, assim. 668 00:35:46,390 --> 00:35:48,880 E isso vale em sua linha. 669 00:35:48,880 --> 00:35:54,680 Este aqui só dá-lhe uma coluna, mas como um vector de coluna. 670 00:35:54,680 --> 00:36:04,634 671 00:36:04,634 --> 00:36:06,425 Eu só percebi agora eu esqueceu-se de demonstrar 672 00:36:06,425 --> 00:36:09,150 algumas coisas legais sobre vetores que você pode fazer com índices. 673 00:36:09,150 --> 00:36:10,480 Então deixe-me fazer isso agora. 674 00:36:10,480 --> 00:36:17,130 Então vamos fazer c colocando gets-- isso em pause-- 2 vezes 1 a 10. 675 00:36:17,130 --> 00:36:21,360 Assim, c é apenas vai ser o vetor de 2 a 20. 676 00:36:21,360 --> 00:36:24,640 Eu posso tomar elementos como este, c2. 677 00:36:24,640 --> 00:36:30,942 I pode passar em um vetor assim, C-- me deixar 678 00:36:30,942 --> 00:36:34,470 usar o nome diferente do que c, como vec c. 679 00:36:34,470 --> 00:36:37,591 680 00:36:37,591 --> 00:36:39,340 Basicamente, eu estou fazendo isso para que você não fique 681 00:36:39,340 --> 00:36:45,010 confundido como um C entre função da construção do vector, 682 00:36:45,010 --> 00:36:48,800 e, em seguida, c como um nome de variável. 683 00:36:48,800 --> 00:36:53,120 Suportes Vec C 4, 5, 7. 684 00:36:53,120 --> 00:36:56,540 Isso vai me tirar do quarto, quinto, e sete elementos da matriz. 685 00:36:56,540 --> 00:37:01,740 Eu posso fazer VEC, colocar em um negativo índice, como negativa 4. 686 00:37:01,740 --> 00:37:06,500 Isso vai me tirar isso com o quarto elemento removido. 687 00:37:06,500 --> 00:37:10,140 Então, se eu queria fazer fatias, Eu posso fazer vec 2 a 6. 688 00:37:10,140 --> 00:37:15,480 2 cólon 6 é apenas mais um vector, que é 2, 3, 4, 5, 6. 689 00:37:15,480 --> 00:37:18,230 Cospe isso. 690 00:37:18,230 --> 00:37:20,770 >> Então, de qualquer forma, de volta aos carros mt. 691 00:37:20,770 --> 00:37:26,650 692 00:37:26,650 --> 00:37:28,450 Então vamos fazer algumas regressões. 693 00:37:28,450 --> 00:37:34,240 Digamos modelo gets-- vamos linearmente regress-- Eu não sei. 694 00:37:34,240 --> 00:37:41,780 Primeiro vamos fazer anexar mtcars, é claro. 695 00:37:41,780 --> 00:37:44,870 696 00:37:44,870 --> 00:38:00,010 Então, [inaudível] modelo lm, vamos regredir milhas por galão sobre o peso til. 697 00:38:00,010 --> 00:38:03,300 E então quadro de dados é mtcars. 698 00:38:03,300 --> 00:38:06,830 Então modelo de resumo. 699 00:38:06,830 --> 00:38:12,900 700 00:38:12,900 --> 00:38:15,595 >> OK, então isso parece um pouco complicado. 701 00:38:15,595 --> 00:38:19,380 Mas, basicamente, vendo como se nós tentar expressar milhas por galão 702 00:38:19,380 --> 00:38:23,970 como uma função linear de peso, então temos esta linha aqui, 703 00:38:23,970 --> 00:38:28,730 que intercepta a 37,28. 704 00:38:28,730 --> 00:38:33,830 37.28 seriam as milhas teóricas por galão de um carro que pesa zero. 705 00:38:33,830 --> 00:38:41,210 E, em seguida, para cada tonelada adicional, você bater cerca de cinco milhas por galão 706 00:38:41,210 --> 00:38:42,440 fora disso. 707 00:38:42,440 --> 00:38:45,120 Ambos estes coeficientes você pode ver, há erros padrão. 708 00:38:45,120 --> 00:38:47,870 E eles são muito estatisticamente significativa. 709 00:38:47,870 --> 00:38:55,740 >> Assim, podemos estar muito certo de 1 e 10 a 10 para negativo. 710 00:38:55,740 --> 00:38:59,510 Assim 1 vezes algo para o negativo 10, que se você fizer um carro mais pesado, 711 00:38:59,510 --> 00:39:01,440 ele terá piores milhas por galão. 712 00:39:01,440 --> 00:39:04,940 713 00:39:04,940 --> 00:39:07,250 Ou podemos testar algum outro modelo. 714 00:39:07,250 --> 00:39:09,230 Como em vez de regredindo isso em peso, 715 00:39:09,230 --> 00:39:12,600 vamos regredir-lo no log de peso, porque talvez o peso eficaz 716 00:39:12,600 --> 00:39:15,690 na milhagem não é de alguma forma linear. 717 00:39:15,690 --> 00:39:18,540 >> Isso nos deu uma r ao quadrado de 0,7528. 718 00:39:18,540 --> 00:39:19,610 Então, vamos tentar isso. 719 00:39:19,610 --> 00:39:21,485 Desta vez vamos fazer um variável diferente, também. 720 00:39:21,485 --> 00:39:22,500 Model2. 721 00:39:22,500 --> 00:39:24,800 Assim resumo, model2. 722 00:39:24,800 --> 00:39:28,200 723 00:39:28,200 --> 00:39:31,390 Tudo bem, então, novamente, temos a nossa melhor linha de ajuste aqui. 724 00:39:31,390 --> 00:39:36,160 E este tempo-- este está dizendo: basicamente, que cada vez que você 725 00:39:36,160 --> 00:39:38,090 aumentar o peso de um carro por um factor de e 726 00:39:38,090 --> 00:39:40,580 você perde isso muitas milhas por galão. 727 00:39:40,580 --> 00:39:43,210 728 00:39:43,210 --> 00:39:50,326 >> E por isso desta vez o nosso padrão residual erro ele-- que não importa, realmente. 729 00:39:50,326 --> 00:39:53,540 O erro padrão residual é basicamente, apenas o erro padrão 730 00:39:53,540 --> 00:39:57,760 que você deixou após você tomar a linha de tendência de distância. 731 00:39:57,760 --> 00:40:02,805 E o nosso r ao quadrado aqui é de 0,81, que é um pouco melhor do que o 732 00:40:02,805 --> 00:40:07,640 que tínhamos antes, 0,52. 733 00:40:07,640 --> 00:40:09,750 >> E agora vamos adicionar um termo a esta regressão. 734 00:40:09,750 --> 00:40:13,020 Então, vamos regredir milhas por galão tanto no registo dos pesos 735 00:40:13,020 --> 00:40:21,130 e, vamos fazer, q milhas, tempo de quarto de milha. 736 00:40:21,130 --> 00:40:26,190 OK, ele deve ter as-- tudo bem, 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-- desculpe, o quê? 740 00:40:35,000 --> 00:40:37,000 Deixe-me chamar esse algo mais além model2. 741 00:40:37,000 --> 00:40:38,000 Deixe-me chamar esse model3. 742 00:40:38,000 --> 00:40:40,860 743 00:40:40,860 --> 00:40:42,900 E então agora nós podemos fazer resumo model3. 744 00:40:42,900 --> 00:40:46,850 745 00:40:46,850 --> 00:40:49,100 E então, novamente, este é basicamente o que você poderia esperar. 746 00:40:49,100 --> 00:40:51,750 Você tem interceptar positivo. 747 00:40:51,750 --> 00:40:54,550 O efetivo aumento peso é negativo. 748 00:40:54,550 --> 00:40:58,490 E a eficaz aumentando o tempo de quarto de milha 749 00:40:58,490 --> 00:41:02,420 é positivo, mas embora menos do que o peso. 750 00:41:02,420 --> 00:41:06,010 Agora intuitivamente, você pode fazer o sentido de isso dizendo pensar em carros esportivos. 751 00:41:06,010 --> 00:41:08,950 Há uma aceleração muito rápida, Um muito curta vezes quarto de milha. 752 00:41:08,950 --> 00:41:13,729 Eles também estão indo para usar mais gás, Considerando carros mais sensíveis vão 753 00:41:13,729 --> 00:41:16,020 ter aceleração mais lenta, quarto de milha vezes mais elevados, 754 00:41:16,020 --> 00:41:20,890 e usam menos gás ,, assim milhas por galão mais elevados. 755 00:41:20,890 --> 00:41:21,390 Ótimo. 756 00:41:21,390 --> 00:41:23,431 E então agora é hora de tramar algo como isto. 757 00:41:23,431 --> 00:41:27,810 Então, vamos fazer-- tão nua ossos que podemos fazer plots-- 758 00:41:27,810 --> 00:41:35,280 porque eu tenho ligado este quadro de dados antes-- podemos apenas fazer parcelas, mpg em peso. 759 00:41:35,280 --> 00:41:38,762 760 00:41:38,762 --> 00:41:39,720 Faça deste um pouco maior. 761 00:41:39,720 --> 00:41:55,050 762 00:41:55,050 --> 00:41:57,350 Lá, temos basicamente uma gráfico de dispersão, mas os pontos 763 00:41:57,350 --> 00:41:58,690 são meio difícil de ver sobre este assunto. 764 00:41:58,690 --> 00:42:04,860 765 00:42:04,860 --> 00:42:10,900 >> Eu não me lembro o que o improviso sintaxe é para mudar o enredo. 766 00:42:10,900 --> 00:42:14,100 Então eu acho que isso vai ser um bom momento para trazer, 767 00:42:14,100 --> 00:42:18,000 há uma muito agradável ajuda builtin recurso, citações de ajuda funcionar nome. 768 00:42:18,000 --> 00:42:21,690 Nós vamos trazer-se, basicamente, qualquer coisa que você gostaria. 769 00:42:21,690 --> 00:42:28,010 770 00:42:28,010 --> 00:42:32,730 Eu acho que eu realmente vou fazer isso Tipo de igual para p pontos parcelas. 771 00:42:32,730 --> 00:42:34,369 Será que isso muda alguma coisa? 772 00:42:34,369 --> 00:42:35,160 E não, não realmente. 773 00:42:35,160 --> 00:42:39,160 774 00:42:39,160 --> 00:42:39,660 Tudo certo. 775 00:42:39,660 --> 00:42:46,760 776 00:42:46,760 --> 00:42:49,580 >> Por alguma razão, quando eu fiz isso em meu próprio computador há um tempo atrás, 777 00:42:49,580 --> 00:42:52,080 Todos os pontos de dispersão eram muito mais clara. 778 00:42:52,080 --> 00:43:06,390 779 00:43:06,390 --> 00:43:13,970 De qualquer forma, são o tipo de dispersão de visível? 780 00:43:13,970 --> 00:43:15,124 Não há ninguém lá. 781 00:43:15,124 --> 00:43:16,165 Alguns lá, alguns lá. 782 00:43:16,165 --> 00:43:18,860 783 00:43:18,860 --> 00:43:21,185 Você pode classificar de vê-los, certo? 784 00:43:21,185 --> 00:43:24,310 Portanto, se queremos adicionar uma linha de melhor ajustamento para este lote aqui, o que é um pouco nua 785 00:43:24,310 --> 00:43:29,290 bones-- deixe-me fazer-lhe um pouco mais agradável. 786 00:43:29,290 --> 00:43:38,075 Principal igual contra peso. 787 00:43:38,075 --> 00:43:46,322 788 00:43:46,322 --> 00:43:49,740 Milhas por galão. 789 00:43:49,740 --> 00:43:53,570 Mais uma vez, você pode ver o quão útil argumentos opcionais estão aqui também 790 00:43:53,570 --> 00:43:58,090 não ter que colocar as coisas em um certa ordem com argumentos de teclado 791 00:43:58,090 --> 00:44:01,600 quando você tem parcelas, pois estes tomam um monte de argumentos. 792 00:44:01,600 --> 00:44:07,490 >> Xlab igual peso, peso, toneladas. 793 00:44:07,490 --> 00:44:10,091 794 00:44:10,091 --> 00:44:10,590 Tudo certo. 795 00:44:10,590 --> 00:44:17,340 796 00:44:17,340 --> 00:44:21,480 OK, sim, este dispositivo está sendo um pouco chato. 797 00:44:21,480 --> 00:44:30,160 Mas você pode ver tipo de lá em cima, há um título do gráfico do lado. 798 00:44:30,160 --> 00:44:35,260 Por aqui there's-- na parte inferior aqui existem rótulos de eixo. 799 00:44:35,260 --> 00:44:37,700 Eu não me lembro de improviso o que os comandos ars-- 800 00:44:37,700 --> 00:44:41,000 que as funções são para aumentar o tamanho desses rótulos e títulos, 801 00:44:41,000 --> 00:44:43,110 mas eles estão lá. 802 00:44:43,110 --> 00:44:46,625 >> E assim, se quisermos adicione a melhor linha de ajuste, 803 00:44:46,625 --> 00:44:49,250 nós poderíamos fazer algo como-- I tem a sintaxe escrito aqui em cima. 804 00:44:49,250 --> 00:44:52,280 805 00:44:52,280 --> 00:45:11,130 Então lembre-se que acabamos de adicionar modelo foi mpg, peso, mtcars. 806 00:45:11,130 --> 00:45:16,470 E assim se eu queria adicionar um melhor ajuste linha, eu poderia fazer, um modelo b line. 807 00:45:16,470 --> 00:45:18,556 E o crescimento, temos uma linha de melhor ajustamento. 808 00:45:18,556 --> 00:45:19,970 É meio difícil de ver novamente. 809 00:45:19,970 --> 00:45:22,178 Estou muito triste sobre o dificuldades tecnológicas. 810 00:45:22,178 --> 00:45:25,230 Mas ele é executado basicamente canto superior esquerdo para canto inferior direito. 811 00:45:25,230 --> 00:45:27,550 >> E se a escala foram maior, você poderia ver 812 00:45:27,550 --> 00:45:31,260 que a interceptação é o que você pode encontrar a partir das estatísticas de resumo 813 00:45:31,260 --> 00:45:34,790 se você digitar modelo de resumo. 814 00:45:34,790 --> 00:45:40,130 OK, então eu espero que todo mundo fica algo de uma sensação de que 815 00:45:40,130 --> 00:45:42,030 R é, o que é bom para. 816 00:45:42,030 --> 00:45:45,520 Você poderia fazer muito melhor do que parcelas isso em seu próprio tempo, se você gosta. 817 00:45:45,520 --> 00:45:50,100 818 00:45:50,100 --> 00:45:53,950 >> Assim, a interface de função externa. 819 00:45:53,950 --> 00:46:00,330 Isto é algo que não é tipicamente coberto de palestras introdutórias 820 00:46:00,330 --> 00:46:03,560 ou qualquer coisa introdutório para r. 821 00:46:03,560 --> 00:46:05,584 Não é provável que você vai precisar dele. 822 00:46:05,584 --> 00:46:08,000 No entanto, eu achei que seria útil em meus próprios projetos no passado. 823 00:46:08,000 --> 00:46:10,984 E não há nenhuma boa tutorial para ele on-line. 824 00:46:10,984 --> 00:46:12,900 Então, eu estou indo só para apressá-lo durante todo este 825 00:46:12,900 --> 00:46:16,606 e então você está livre para sair. 826 00:46:16,606 --> 00:46:18,480 E assim o estrangeiro interface de função que está 827 00:46:18,480 --> 00:46:23,130 você pode usar para chamar a ver funções com um R. Internamente, 828 00:46:23,130 --> 00:46:29,850 R é construído sobre aritmética de C. R é apenas 64-bit aritmética de ponto flutuante de C, 829 00:46:29,850 --> 00:46:32,852 que é do tipo double [inaudível]. 830 00:46:32,852 --> 00:46:35,060 E você pode querer fazer isso por um monte de razões. 831 00:46:35,060 --> 00:46:39,250 Por um lado, R é interpretado, é não compilado para baixo para código de máquina. 832 00:46:39,250 --> 00:46:42,170 Assim, você pode reescrever o seu presilhas internas em C e em seguida, obter 833 00:46:42,170 --> 00:46:45,920 a vantagem de utilizar como R. é um pouco mais conveniente do que C. 834 00:46:45,920 --> 00:46:48,899 Tem a melhor gráfica instalações e outros enfeites. 835 00:46:48,899 --> 00:46:51,690 E enquanto ainda está sendo capaz de obter velocidade máxima fora das presilhas internas, 836 00:46:51,690 --> 00:46:53,650 que é onde você realmente precisa dele. 837 00:46:53,650 --> 00:46:56,330 >> Reutilizar bibliotecas C existentes, que também é importante. 838 00:46:56,330 --> 00:47:00,320 Se você tiver alguma biblioteca C para como, Eu não sei, transformadas de Fourier, 839 00:47:00,320 --> 00:47:05,190 ou algum muito Arqueano procedimento estatístico utilizado 840 00:47:05,190 --> 00:47:09,470 em alta astrofísica energia ou algo assim, eu não sei. 841 00:47:09,470 --> 00:47:13,058 Alta energia astrofísica não é nem mesmo um pensamento, eu acho. 842 00:47:13,058 --> 00:47:16,480 Mas você pode fazer isso em vez de ter para escrever um porta R nativa deles. 843 00:47:16,480 --> 00:47:22,725 E no as-- e outra vez, como se você olhar na maioria das bibliotecas padrão do R, 844 00:47:22,725 --> 00:47:25,600 sobre os internos, os internos são vai usar a função externa 845 00:47:25,600 --> 00:47:26,724 interface muito extensivamente. 846 00:47:26,724 --> 00:47:31,630 Eles têm coisas como Fourier transforma computação ou correlação 847 00:47:31,630 --> 00:47:34,890 coeficientes escrito em C, e eles só tem R wrappers em torno deles. 848 00:47:34,890 --> 00:47:38,230 A interface é um pouco difícil. eu acho 849 00:47:38,230 --> 00:47:43,750 sua dificuldade é exagerada em um Muitas das instruções que você vai encontrar. 850 00:47:43,750 --> 00:47:46,200 Mas, no entanto, é um pouco confuso. 851 00:47:46,200 --> 00:47:48,650 E eu não tenho sido capaz de encontrar um bom tutorial para ele, 852 00:47:48,650 --> 00:47:51,980 Então é isso agora. 853 00:47:51,980 --> 00:47:55,360 Mais uma vez, este segmento inteiro é mais para referência futura. 854 00:47:55,360 --> 00:47:57,687 Não se preocupe com cópia tudo para baixo no momento. 855 00:47:57,687 --> 00:48:00,020 Assim, as seguintes instruções são para sistemas Unix-like, 856 00:48:00,020 --> 00:48:05,150 Linux, BSD, OS X. Eu não sei como isso funciona no Windows, 857 00:48:05,150 --> 00:48:08,280 mas por favor, não faça o seu projeto final no Windows. 858 00:48:08,280 --> 00:48:10,790 859 00:48:10,790 --> 00:48:12,460 Você realmente não quer. 860 00:48:12,460 --> 00:48:14,770 Unix é muito melhor conjunto para programação casual. 861 00:48:14,770 --> 00:48:19,320 862 00:48:19,320 --> 00:48:21,390 Então, basicamente estrangeira interface de função. 863 00:48:21,390 --> 00:48:24,420 Se você quer escrever um C função para uso com R, 864 00:48:24,420 --> 00:48:27,250 ele tem que tomar todo o argumentos como ponteiros. 865 00:48:27,250 --> 00:48:30,666 >> Assim, para valores individuais, esta significa que está apontado para o valor. 866 00:48:30,666 --> 00:48:33,040 Para matrizes, isto é um apontador ao primeiro elemento, que 867 00:48:33,040 --> 00:48:36,750 é o que realmente significam nomes de arrays. 868 00:48:36,750 --> 00:48:40,140 Novamente, isso é algo que você deve ter pretty totalmente para baixo depois de p definir cinco. 869 00:48:40,140 --> 00:48:43,334 Nomes de arrays são apenas apontadores ao primeiro elemento, 870 00:48:43,334 --> 00:48:44,750 O tipo de ponto flutuante é o dobro. 871 00:48:44,750 --> 00:48:47,310 E sua função deve retornar void. 872 00:48:47,310 --> 00:48:50,810 A única maneira que ele pode realmente dizer o que aconteceu R 873 00:48:50,810 --> 00:48:54,410 é por modificação da memória que R deram a ele através da função externa 874 00:48:54,410 --> 00:48:54,910 interface. 875 00:48:54,910 --> 00:48:58,180 876 00:48:58,180 --> 00:49:00,127 >> Então eu escrevi este exemplo aqui, este é 877 00:49:00,127 --> 00:49:02,460 uma função que calcula uso produto escalar de dois vetores. 878 00:49:02,460 --> 00:49:05,060 Ela recebe dois argumentos, vec1, vec2, que são os próprios vectores, 879 00:49:05,060 --> 00:49:06,934 e, em seguida, n, que é um comprimento, porque mais uma vez, 880 00:49:06,934 --> 00:49:12,630 R foi construído em [inaudível] para descobrir o comprimento de vectores, mas não faz C. 881 00:49:12,630 --> 00:49:16,182 Em C, vetores é uma arbitrária delimitado pedaço de memória. 882 00:49:16,182 --> 00:49:17,890 Assim, a maneira que você puder calcular produtos de ponto 883 00:49:17,890 --> 00:49:23,470 é apenas definir este parâmetro para fora a zero e então percorrer 884 00:49:23,470 --> 00:49:28,760 a partir de 1 para estrelar n, porque n é um ponteiro para o comprimento, 885 00:49:28,760 --> 00:49:32,929 basta adicionar algo a isso parâmetro. 886 00:49:32,929 --> 00:49:34,970 E isso pode ser uma boa prática se você estiver indo para fazer 887 00:49:34,970 --> 00:49:37,270 esta a escrever duas funções C separados. 888 00:49:37,270 --> 00:49:41,970 Um deles has-- um deles apenas leva os argumentos e os tipos 889 00:49:41,970 --> 00:49:43,970 que seria, normalmente, em C. 890 00:49:43,970 --> 00:49:47,780 >> Então Leva uma matriz argumentos como ponteiros. 891 00:49:47,780 --> 00:49:57,090 Mas os argumentos de valor único como n, ele só tem como valores por cópia, 892 00:49:57,090 --> 00:49:57,917 sem ponteiros. 893 00:49:57,917 --> 00:49:59,750 E então isso não acontecer Ponteiro [inaudível] fora. 894 00:49:59,750 --> 00:50:01,290 E então você pode ter uma pessoa diferente, basicamente, 895 00:50:01,290 --> 00:50:03,623 função wrapper que, basicamente, lida com os requisitos 896 00:50:03,623 --> 00:50:07,740 da função externa interface para você. 897 00:50:07,740 --> 00:50:11,840 >> A maneira como você chamar isso de R é, uma vez você tem a sua função escrita em C, 898 00:50:11,840 --> 00:50:17,770 você digita R shlib cmd, R comando biblioteca compartilhada, 899 00:50:17,770 --> 00:50:20,110 foo ponto c, ou o que quer o nome do arquivo é, 900 00:50:20,110 --> 00:50:23,020 eo sistema operacional não desembolsar no terminal R. 901 00:50:23,020 --> 00:50:25,200 E isso vai criar uma biblioteca chamada foo dot-lo. 902 00:50:25,200 --> 00:50:28,180 E então você pode carregá-lo em nosso script ou interativamente 903 00:50:28,180 --> 00:50:32,310 com comando de carregamento dyn ponto. 904 00:50:32,310 --> 00:50:35,720 Depois, há uma função em R chamado ponto c. 905 00:50:35,720 --> 00:50:39,310 >> Isso leva argumentos que são primeiro o nome da função em C 906 00:50:39,310 --> 00:50:40,970 que você deseja chamar. 907 00:50:40,970 --> 00:50:43,920 E então todos os parâmetros à função que desempenha, 908 00:50:43,920 --> 00:50:45,420 eles têm de ser na ordem adequada. 909 00:50:45,420 --> 00:50:48,580 Você tem que usar este tipo funções de coerção como um número inteiro, como 910 00:50:48,580 --> 00:50:52,050 casal, como personagem, e como lógica. 911 00:50:52,050 --> 00:50:54,710 E então, quando ele retorna o lista, que novamente é apenas 912 00:50:54,710 --> 00:50:57,550 uma matriz associada do nomes de parâmetros e os valores 913 00:50:57,550 --> 00:51:00,950 após a função foi executado. 914 00:51:00,950 --> 00:51:08,520 >> Portanto, neste caso, porque tem prod dot argumentos vec1, vec2, e int n, n out. 915 00:51:08,520 --> 00:51:11,980 Para dot c temos prod ponto, o nome da função 916 00:51:11,980 --> 00:51:16,250 estamos chamando, vec1, vec2, tipo coerce. 917 00:51:16,250 --> 00:51:20,060 O comprimento de qualquer vector, Eu só escolhi vec1 arbitrariamente. 918 00:51:20,060 --> 00:51:25,479 Seria mais robusta quer dizer s comprimento inteiro de vec1 min, comprimento vec2. 919 00:51:25,479 --> 00:51:27,520 Então, assim como duplo zero, porque nós realmente não 920 00:51:27,520 --> 00:51:29,644 importo com o que vai para o out parâmetro porque somos 921 00:51:29,644 --> 00:51:32,270 definindo-a zero de qualquer maneira. 922 00:51:32,270 --> 00:51:37,560 >> E então os resultados vão ser uma grande variedade de associado, basicamente, 923 00:51:37,560 --> 00:51:42,090 vec1 é o que quer, vec2 é o que quer. 924 00:51:42,090 --> 00:51:44,330 Mas estamos interessados ​​em para fora, para que possamos tirar isso. 925 00:51:44,330 --> 00:51:47,780 Esta é mais uma vez, um exemplo muito brinquedo de uma função de interface externa. 926 00:51:47,780 --> 00:51:54,160 Mas se você tem que computar dot produtos de vectores maciças em loops, 927 00:51:54,160 --> 00:51:56,960 ou se você tem que fazer outra coisa em um loop, 928 00:51:56,960 --> 00:51:59,850 e você não quer contar com R, que tem um pouco de sobrecarga 929 00:51:59,850 --> 00:52:02,830 embutido, isto pode ser útil. 930 00:52:02,830 --> 00:52:05,870 >> Novamente, isto não é geralmente um tema introdutório para R. 931 00:52:05,870 --> 00:52:08,571 Não é muito bem documentado. 932 00:52:08,571 --> 00:52:11,070 Eu só estou incluindo-o porque Eu achei que seria útil no passado. 933 00:52:11,070 --> 00:52:13,654 Práticas Então, ruins. 934 00:52:13,654 --> 00:52:15,820 Eu mencionei que há uma loop for na função. 935 00:52:15,820 --> 00:52:21,150 Geralmente você não deve, em a língua, não usá-lo. 936 00:52:21,150 --> 00:52:26,100 Com base em como R implementa iteração internamente, o mesmo pode ser lento. 937 00:52:26,100 --> 00:52:28,540 Eles só olhar feio também. 938 00:52:28,540 --> 00:52:32,410 >> R lida com vectores muito bem, por isso, muitas vezes você não precisa usá-lo. 939 00:52:32,410 --> 00:52:35,050 940 00:52:35,050 --> 00:52:38,900 Depois, você pode normalmente substituir um vector frequentemente 941 00:52:38,900 --> 00:52:42,490 com estas funções chamadas de alta funções de ordem, Mapa, Reduzir, 942 00:52:42,490 --> 00:52:44,404 Localizar, ou filtro. 943 00:52:44,404 --> 00:52:46,320 Vou apenas dar alguns exemplos do que estes fazem. 944 00:52:46,320 --> 00:52:49,957 Mapa é uma função de ordem superior porque é preciso uma função como um argumento. 945 00:52:49,957 --> 00:52:52,290 Assim, você pode dar-lhe uma função, você pode dar-lhe uma matriz, 946 00:52:52,290 --> 00:52:54,640 e ele vai aplicar a função para cada elemento da matriz 947 00:52:54,640 --> 00:52:55,681 e retornar a nova matriz. 948 00:52:55,681 --> 00:52:58,035 949 00:52:58,035 --> 00:53:00,160 Reduzir, basicamente você dá um array, você dá a ele 950 00:53:00,160 --> 00:53:02,930 uma função que leva dois argumentos. 951 00:53:02,930 --> 00:53:07,100 Será aplicável a função em primeiro lugar, a primeiro argumento com algum valor inicial. 952 00:53:07,100 --> 00:53:09,440 Em seguida a esse resultado no segundo. 953 00:53:09,440 --> 00:53:12,590 Em seguida a esse resultado no terceiro, em seguida, para esse resultado na quarta. 954 00:53:12,590 --> 00:53:14,870 E, em seguida, retornar quando se chega ao final. 955 00:53:14,870 --> 00:53:17,620 Assim, por exemplo, se você quiser calcular a soma de todos os elementos 956 00:53:17,620 --> 00:53:23,240 em uma matriz, do que se pode chamar de reduzir com [inaudível] reduzir um complemento 957 00:53:23,240 --> 00:53:26,620 função, como func a, b, voltar a mais b. 958 00:53:26,620 --> 00:53:28,960 E, em seguida, iniciar um valor de 0. 959 00:53:28,960 --> 00:53:32,950 >> E tudo isso, você pode encontrá-los descrito na documentação R, 960 00:53:32,950 --> 00:53:35,720 em qualquer livro sobre programação funcional. 961 00:53:35,720 --> 00:53:38,330 Há também essa classe de funções chamadas aplicar funções, 962 00:53:38,330 --> 00:53:42,807 que eu don't-- eles são um pouco difícil de explicar, 963 00:53:42,807 --> 00:53:45,640 mas se você olhar em [inaudível] reservado que citei no início, 964 00:53:45,640 --> 00:53:48,615 ele explica-los muito bem em seu apêndice sobre a programação R. 965 00:53:48,615 --> 00:53:51,599 966 00:53:51,599 --> 00:53:53,390 Mais sobre práticas, acrescentando-se a vectores. 967 00:53:53,390 --> 00:53:57,570 968 00:53:57,570 --> 00:53:58,070 Sim? 969 00:53:58,070 --> 00:54:01,651 970 00:54:01,651 --> 00:54:02,900 Eu acho que eu deveria corrigir isso. 971 00:54:02,900 --> 00:54:07,450 Nessa primeira linha, seta vec, que a flecha não deveria estar lá. 972 00:54:07,450 --> 00:54:10,920 Você pode atribuir a um vector, mais uma vez, por ter o seu comprimento mais 1 973 00:54:10,920 --> 00:54:13,220 e atribuir algum valor para que. 974 00:54:13,220 --> 00:54:18,970 Isso vai estender o vector, ou você pode fazer equals c VEC, newvalue VEC. 975 00:54:18,970 --> 00:54:21,540 Novamente, se você usar C com um argumento como um vetor, 976 00:54:21,540 --> 00:54:23,300 a hierarquia resultante fica achatada. 977 00:54:23,300 --> 00:54:27,160 Então você só vai obter um vector que é prorrogado por um. 978 00:54:27,160 --> 00:54:30,410 Nunca faça isso. 979 00:54:30,410 --> 00:54:33,330 >> A razão pela qual você não deve fazer isso é isto. 980 00:54:33,330 --> 00:54:37,430 Quando você atribuir um vetor, ele dá-lhe um certo pedaço de memória. 981 00:54:37,430 --> 00:54:40,680 Se você aumentar esse tamanho do vetor, ele tem que realocar o vector 982 00:54:40,680 --> 00:54:43,820 Em outro lugar. 983 00:54:43,820 --> 00:54:46,980 E assim realocação é muito caro. 984 00:54:46,980 --> 00:54:50,530 Eu não vou entrar em detalhes de como alocadores de memória são implementados 985 00:54:50,530 --> 00:54:57,280 no nível do sistema operacional, mas ele tem um monte de tempo 986 00:54:57,280 --> 00:54:58,962 para encontrar um novo bloco de memória. 987 00:54:58,962 --> 00:55:00,920 E também, se você estiver re-alocação de lotes e lotes 988 00:55:00,920 --> 00:55:03,500 de progressivamente maior Pedaços, você acaba 989 00:55:03,500 --> 00:55:06,420 com algo chamado fragmentação de memória, 990 00:55:06,420 --> 00:55:09,390 onde a memória disponível é dividido em muitos pequenos blocos 991 00:55:09,390 --> 00:55:11,500 no ponto de vista alocadores de memória. 992 00:55:11,500 --> 00:55:15,340 E fica cada vez mais difícil encontrar memória para outras coisas. 993 00:55:15,340 --> 00:55:19,455 Então, ao invés, se você precisar fazer isso, se você precisa para crescer um vetor de uma extremidade 994 00:55:19,455 --> 00:55:24,240 para o outro, em vez de anexar a ele constantemente, você deve pré-alocá-lo. 995 00:55:24,240 --> 00:55:29,310 Vec seta, comprimento do vector é igual a 1.000, ou o que quer. 996 00:55:29,310 --> 00:55:33,200 >> E então você pode apenas atribuir para valores de um dos vectores 997 00:55:33,200 --> 00:55:36,000 um tempo depois de ter atribuído uma vez. 998 00:55:36,000 --> 00:55:40,140 Corri para este, mais uma vez, o meu trabalho de verão quando eu estava escrevendo NRA diferencial 999 00:55:40,140 --> 00:55:42,120 solver equação. 1000 00:55:42,120 --> 00:55:43,180 Não simbólica numérica. 1001 00:55:43,180 --> 00:55:49,290 A idéia é que uma vez que você tem um valor para a sua solução, 1002 00:55:49,290 --> 00:55:51,240 que você usa para calcular a próxima. 1003 00:55:51,240 --> 00:55:53,700 Então, meu ingênuo naturais inclinação era para dizer OK, 1004 00:55:53,700 --> 00:55:56,930 por isso vou começar com um vector isso é um valor substancial. 1005 00:55:56,930 --> 00:56:01,260 Calcule de que o próximo valor que vai para a minha solução de vetores, 1006 00:56:01,260 --> 00:56:02,630 e acrescentar isso. 1007 00:56:02,630 --> 00:56:05,290 >> Criar algo mais, acrescente isso. 1008 00:56:05,290 --> 00:56:08,120 Foi muito, muito lentamente. 1009 00:56:08,120 --> 00:56:11,540 E quando eu percebi isso e eu mudei o meu sistema 1010 00:56:11,540 --> 00:56:16,020 anexando à presente vetor como 10.000 a 100.000 vezes, 1011 00:56:16,020 --> 00:56:18,910 apenas para pré-alocar um vetor e apenas correr com isso. 1012 00:56:18,910 --> 00:56:22,100 Eu tenho mais de 1.000 vezes a velocidade para cima. 1013 00:56:22,100 --> 00:56:26,280 Portanto, este é um muito comum armadilha para R programação. 1014 00:56:26,280 --> 00:56:31,560 Se você precisa para construir um vector peça por peça, pré-alocá-lo. 1015 00:56:31,560 --> 00:56:35,360 1016 00:56:35,360 --> 00:56:40,240 >> Outra viagem comum up-- esta é minha última slide, não worry-- é o tratamento de erros. 1017 00:56:40,240 --> 00:56:42,890 R, para ser franco, não faz realmente fazer isso muito bem. 1018 00:56:42,890 --> 00:56:45,010 Há muitos problemas que podem surgir. 1019 00:56:45,010 --> 00:56:48,360 Por exemplo, se você receber um array ou um vector a partir de uma função 1020 00:56:48,360 --> 00:56:52,377 que você estava esperando um único valor de veio, ou vice-versa, 1021 00:56:52,377 --> 00:56:55,460 e você passar isso para uma função que você escreveu que espera um único valor, 1022 00:56:55,460 --> 00:56:57,270 que pode ser um problema. 1023 00:56:57,270 --> 00:57:01,440 >> Certas funções retornar nulo como fazem, por exemplo, 1024 00:57:01,440 --> 00:57:05,560 a partir de uma leitura chave inexistente em uma lista. 1025 00:57:05,560 --> 00:57:08,527 Mas nulo não é como C onde se você tentar ler 1026 00:57:08,527 --> 00:57:11,360 a partir de um ponteiro de idade, [inaudível] ponteiro para null, ele só SEG falhas 1027 00:57:11,360 --> 00:57:14,109 e se você estiver em seu depurador-lo lhe diz exatamente onde você está. 1028 00:57:14,109 --> 00:57:17,080 1029 00:57:17,080 --> 00:57:20,772 Em vez disso, null será fazer-- funções vai fazer coisas imprevisíveis 1030 00:57:20,772 --> 00:57:21,730 se eles são nulos handed. 1031 00:57:21,730 --> 00:57:24,575 Como se você está entregue max nulo, ele vai lhe dar o infinito negativo. 1032 00:57:24,575 --> 00:57:27,230 1033 00:57:27,230 --> 00:57:28,190 E assim, sim. 1034 00:57:28,190 --> 00:57:30,880 1035 00:57:30,880 --> 00:57:32,630 E assim que isso aconteceu para mim uma vez, quando eu tinha 1036 00:57:32,630 --> 00:57:34,771 mudou um monte de campos na minha lista de estrutura 1037 00:57:34,771 --> 00:57:37,520 uma vez sem alterá-los em outro lugar quando eu estava lendo a partir deles. 1038 00:57:37,520 --> 00:57:40,670 E então eu tenho todos os tipos de aleatório resultados infinidade surgindo 1039 00:57:40,670 --> 00:57:43,080 e eu nem idéia de onde eles vieram. 1040 00:57:43,080 --> 00:57:45,310 E, infelizmente, não há nenhum modo estrito verdadeiro R 1041 00:57:45,310 --> 00:57:48,940 onde você pode dizer se algo parece que poderia ser um erro, 1042 00:57:48,940 --> 00:57:51,960 basta parar aí para que eu possa ser disciplinado e corrigir isso. 1043 00:57:51,960 --> 00:57:55,282 1044 00:57:55,282 --> 00:57:57,240 No entanto, há algo chamado parada se não. 1045 00:57:57,240 --> 00:58:00,480 Isso é equivalente a assert de C, se você já conversamos sobre isso. 1046 00:58:00,480 --> 00:58:02,690 Eu não acho que afirmam C é um tema de palestras, 1047 00:58:02,690 --> 00:58:06,370 mas o seu líder de seção poderia ter ido sobre ele. 1048 00:58:06,370 --> 00:58:10,393 E pare de se basicamente não tem qualquer predicado, portanto, qualquer declaração que 1049 00:58:10,393 --> 00:58:11,824 pode ser verdadeira ou falsa. 1050 00:58:11,824 --> 00:58:13,490 E se é falso, ele pára de seu programa. 1051 00:58:13,490 --> 00:58:18,260 Diz-lhe exatamente o que você line foram e que condição falhou. 1052 00:58:18,260 --> 00:58:21,910 >> E isso muito útil, por exemplo, verificação de sanidade, entradas de função. 1053 00:58:21,910 --> 00:58:25,110 Então, se você tem uma função e você espera que, digamos, 1054 00:58:25,110 --> 00:58:29,640 se você deveria me dar uma data, eu quero as datas ser apenas um vector de comprimento 1 1055 00:58:29,640 --> 00:58:31,735 e em algum lugar entre 1 e 31. 1056 00:58:31,735 --> 00:58:34,420 1057 00:58:34,420 --> 00:58:36,170 E se não, eu sei algo está errado. 1058 00:58:36,170 --> 00:58:40,280 E eu optar por parar lá antes de este tem batida aleatória em efeitos com código 1059 00:58:40,280 --> 00:58:44,190 que é mais difícil de rastrear completamente. 1060 00:58:44,190 --> 00:58:47,170 Então essa é uma possível usar para parar se não. 1061 00:58:47,170 --> 00:58:48,660 >> De qualquer forma, OK. 1062 00:58:48,660 --> 00:58:49,690 Então, isso é o fim. 1063 00:58:49,690 --> 00:58:51,290 Muito obrigado por terem vindo. 1064 00:58:51,290 --> 00:58:53,710 Eu sou um amador neste. 1065 00:58:53,710 --> 00:58:57,270 Então, desculpe se você está entediado ou confusa ou que o têm. 1066 00:58:57,270 --> 00:59:01,670 Estou feliz de ter perguntas por e-mail em connorharris@college.harvard.edu. 1067 00:59:01,670 --> 00:59:07,230 Isso vale também para todos vendo isso vivem ou mais tarde. 1068 00:59:07,230 --> 00:59:10,190 Além disso, embora eu não sou um TF, eu também estou muito 1069 00:59:10,190 --> 00:59:13,900 dispostos a servir como um não-oficial conselheiro para quem é 1070 00:59:13,900 --> 00:59:15,460 R usando em um projeto final. 1071 00:59:15,460 --> 00:59:19,900 >> Se você gostaria de que, em seguida, apenas fale com o seu TF 1072 00:59:19,900 --> 00:59:23,750 e, em seguida, escreva-me um e-mail assim Eu sei o que você está trabalhando em 1073 00:59:23,750 --> 00:59:26,680 e para que eu possa configurar reunião vezes com você, se quiser. 1074 00:59:26,680 --> 00:59:27,990 Então, novamente, muito obrigado. 1075 00:59:27,990 --> 00:59:28,960 Espero que tenha gostado. 1076 00:59:28,960 --> 00:59:29,450 >> AUDIÊNCIA: [inaudível]. 1077 00:59:29,450 --> 00:59:30,617 >> CONNER HARRIS: Claro. 1078 00:59:30,617 --> 00:59:34,910 >> AUDIÊNCIA: Que tipo de projeto seria um estudante CS usar R para? 1079 00:59:34,910 --> 00:59:37,427 1080 00:59:37,427 --> 00:59:40,510 CONNER HARRIS: Então, se você não está fazer algo que é puramente em mineração de dados, 1081 00:59:40,510 --> 00:59:43,790 por exemplo, e não há muitas coisas 1082 00:59:43,790 --> 00:59:46,692 você poderia fazer com que os dados mineração e aprendizagem de máquina. 1083 00:59:46,692 --> 00:59:48,900 Você pode querer usar R para um componente de algo. 1084 00:59:48,900 --> 00:59:52,022 Eu trouxe, originalmente, o exemplo de se você está escrevendo um site 1085 00:59:52,022 --> 00:59:54,730 e você deseja executar automatizada análise estatística do seu servidor 1086 00:59:54,730 --> 00:59:57,990 registros em um determinado período de tempo todos os dias, que pode ser algo que é 1087 00:59:57,990 --> 01:00:01,260 muito fácil de fazer em apenas uma breve R script que você pode programar 1088 01:00:01,260 --> 01:00:04,200 para executar todas as noites, por exemplo. 1089 01:00:04,200 --> 01:00:06,550 >> E tenho certeza que, se não há qualquer motivo você 1090 01:00:06,550 --> 01:00:11,520 quer estatísticas ou capacidades gráficas e ter esta corrida automaticamente em vez 1091 01:00:11,520 --> 01:00:13,790 de ter que interagir com coisas em Excel, 1092 01:00:13,790 --> 01:00:16,750 por exemplo, isso é algo você pode querer usar para R. 1093 01:00:16,750 --> 01:00:21,190 Então, mais perguntas antes de eu sair? 1094 01:00:21,190 --> 01:00:21,690 Não? 1095 01:00:21,690 --> 01:00:24,960 Tudo bem, bem, mais uma vez, obrigado Muito por terem vindo. 1096 01:00:24,960 --> 01:00:29,417