CONNOR HARRIS: Still I pense algún vídeo emocionante producido por unha empresa de consultoría profesional que usa R moito no seu traballo. Narrador: O que está detrás das estatísticas, as análises e as visualizacións máis brillantes científicos de datos que hoxe e líderes empresariais dependen para tomar decisións poderosos? Non poderá velo. Pero está aí. Chama-se R, de código aberto r-- o linguaxe de programación estatística que expertos de datos do mundo sobre o uso para todo de cartografía amplo sociais e tendencias de marketing en liña para o desenvolvemento da financeira e clima modelos que axudan a conducir as nosas economías e comunidades. Pero o que é exactamente R e onde R comezar? Ben orixinalmente, R iniciado aquí con dous profesores que quería unha mellor estatística plataforma para os seus alumnos. Entón, eles crearon un modelado despois da linguaxe estatística S. Eles, xunto con moitos outros, continuou traballando e utilizando R, creación de ferramentas para R e atopar novas aplicacións para R cada día. Grazas a esta é esforzo da comunidade mundial, R continuou crecendo con miles de bibliotecas creadas polo usuario construídas para mellorar a funcionalidade e R validación calidade crowdsourced e apoio do máis recoñecido líderes da industria en todos os campos que usa R. O que é óptimo, porque R é o mellor no que fai. Brotando expertos de xeito rápido e facilmente interpretar, interactuar con, e ver os datos que mostra a súa rápida crecente comunidade de usuarios en todo o mundo R para ver como código aberto R continúa a moldear o futuro da estatística análise e ciencia datos. CONNOR HARRIS: OK, gran. Así, a miña propia presentación vai ser un pouco máis sobrio. Non vai implicar tanto música de fondo emocionante. Pero como viu no video, R é unha especie dunha linguaxe xeral do programa finalidade. Pero el foi creado principalmente para o traballo estatístico. Entón, el está deseñado para as estatísticas, para a análise de datos, para a minería de datos. E así pode ver iso en unha morea de as opcións de deseño que os fabricantes de R feita. Foi deseñado para en gran parte, persoas que non son especialistas en programación, que só está pegando programación na parte para que se poidan facer o seu traballo en ciencias sociais ou nas estatísticas ou o que quere. Ten unha morea de moi diferenzas importantes de C. Pero a sintaxe e os paradigmas que usa son practicamente as mesmas. E ten que sentirse fermosa tanto na casa logo de cara. É unha linguaxe imperativa. Non te preocupes moito con iso se non sabe o termo. Pero hai unha distinción entre imperativo, declarativa, e funcional. Imperativo significa só que faga declaracións que son basicamente as ordes. E, a continuación, o intérprete ou o ordenador segue os un a un. É feblemente tipado, existen non hai declaracións de tipo en R. E despois as liñas entre diferentes tipos son un pouco máis solto que son en C, por exemplo. E como dixen hai instalacións moi extensas para elaboración de gráficos, para fins estatísticos análise, para minería de datos. Estes son ambos construídos no linguaxe e, como dixo que o vídeo, miles de bibliotecas de terceiros que podes baixar e utilizar de balde con condicións de licenza moi soltas. Así, en xeral, eu recomendado que mira para estes dous libros se está indo para traballar en R. One deles é o oficial de R novato guiar. É mantida pola desenvolvedores do núcleo de R. Pode baixa-lo de novo, libre de cobrar e legalmente naquel ligazón alí. Todos estes diapositivas están a ir en internet, na páxina web CS50 tras iso está feito. Entón non hai necesidade de copiar cousas para abaixo freneticamente. A outra é unha libro por Cosma Shalizi, que é profesor de estatísticas a Carnegie Mellon, chamado Advanced Data Análise dun Punto de Vista Elementary. Esta non é principalmente un libro de R. É un libro de estatísticas e é un libro de análise de datos. Pero é moi accesible para persoas que ter un mínimo de coñecemento de estatísticas. Nunca tomar un curso formal. Eu só sei anacos a partir de varios asuntos afíns que eu teño feito cursos in. E eu era capaz de entender perfectamente ben. Todas as figuras son dadas en R. Son feitos en I e eles tamén teñen listas de código por baixo de cada figura que dicirlle como fai cada figura con código R. E iso é moi útil se estás emular algunha figura que ve nun libro. E fai a descarga de novo libre stat.cmu.edu/cshalizi/ Sentímolo, que debe ser cortar cshalizi til. Vou ter a certeza de que corrixir cando os diapositivas oficiais subir. / ADAfaEPoV que é só o acrónimo do título do libro. Entón xeral caveats-- R ten unha morea de recursos. Eu só vou ser capaz de cubrir a superficie dunha serie de cousas. Ademais, a primeira porción do seminario será algo dun desaloxo de datos. Estou moi triste con iso. Basicamente, eu vou presenta-lo a unha morea de cousas pronto de cara, indo tan axiña como sexa posible. E entón comezamos a a parte divertida, que é o demo onde eu poida amosar todo que xa falamos sobre a pantalla. E pode xogar no seu propio país. Entón alí vai ser unha morea de material técnico xogado ata aquí. Non se preocupe en copiar todo o que abaixo. Porque A, podes ver todas as material na web do CS50 máis tarde. E B, non é realmente tan importante Recordar esta dos diapositivas. É máis importante que obteña algunha facilidade intuitiva con el e que vén de só xogar. Entón, por que usar R? Basicamente, se ten un proxecto que implica minería grandes conxuntos de datos, os datos visualización, vostede usar R. Se é facendo análises estatísticas complicadas, que sería difícil en Excel, Por exemplo, sería tamén ser tamén boa-- se está facendo estatística análise que é automatizado. Imos dicir que está mantendo un sitio web. E quere ler o rexistro do servidor todos os días e compilar algúns lista, como os principais países que seus usuarios están vindo, algunhas estatísticas de resumo sobre canto tempo gastan no seu sitio web ou o que quere. E quere executar este día a día. Agora, se está a facer iso en Excel, que tería que ir ao seu rexistro do servidor, descargar que nun Folla de datos de Excel, executar toda a análise manual. Con R, pode só escribir un guión. Axenda lo para realizar todos os días a partir do seu ordenador. E, a continuación, cada noite ás 02:00, ou sempre que programa-lo para ser executado, vai ollar a través do seu tráfico de Internet para ese día. E entón, o día seguinte, vai ter esa brillante, novo informe ou o que quere que con toda información que pediu. Entón, basicamente, o R é para Cisco programación versus análise de Cisco. Preliminar está feito. Imos entrar en cousas reais. Polo tanto, hai tres reais tipo na linguaxe. Hai tipo numérico. Hai unha especie de unha diferenza entre enteiros e puntos flotantes, pero non realmente. Hai un personaxe tipo, que é strings. E hai unha lóxica tipo, que é Booleans. E pode converter entre tipo usando estas funcións como numérico, como personaxe, como lóxico. Se chamar, por exemplo, como numérico nunha corda, vai tentar ler esa secuencia como un número, do mesmo xeito que A2i e scanf facer, e C. Se chama como numérico en verdadeiro ou falso ha converter a 1 ou 0. Se chamar como personaxe en calquera cousa que vai convertelo en un representación de cadea. E despois hai os vectores e matrices. Así, os vectores son basicamente 1 matrices dimensionais. Son o que chamamos matrices en C. Matrices, 2 matrices dimensionais. E entón maior matrices dimensionais que pode teñen 3, 4, 5 dimensións ou o que quere de valores numéricos, de cordas, valores de lóxicas. Tamén ten listas que son unha especie de matriz asociativa. Eu vou entrar niso un pouco. Entón, unha cousa importante que as viaxes de persoas en R é que non hai reais, tipos atómicos puros. Non hai distinción real entre un número, como un valor numérico, e unha lista de valores numéricos. Os valores numéricos son realmente o aínda que os vectores de lonxitude 1. E isto ten un número de implicacións importantes. Un deles, iso significa que pode facer cousas moi facilmente que envolven como a adición de un número a un vector. R será basicamente figura o que quere dicir con iso. E eu vou chegar a iso nun segundo. Isto tamén significa que non hai ningunha maneira para o tipo, na medida en checker-- que algo así existe en r-- para contar cando pasou por valor único cando se espera unha matriz ou viceversa. E iso pode causar algún estraño problemas que tiven cando Eu estaba usando R durante o meu traballo de verán. E non hai matrices de tipo mixto. Entón non pode ter unha matriz foron o primeiros elementos é, eu non sei, a cadea "John" ea segundo elemento é o número 42. Se tentar iso, entón vai ter todo só converter a unha cadea. Polo tanto, temos corda John, corda 42. Sintáctica tan inusual features-- máis R sintaxe é moi semellante a C. Existen algunhas diferenzas importantes. A dixitación é moi feble. Polo tanto, non hai declaracións de variables. Recoñecemento usa o estraño operador de erro inferior ao guión. Comentarios están baixo a marca de hash. Creo que hoxe en día chamamos iso hashtag aínda que isto non é realmente non accurate-- a barra dobre. Residuos son modulares con %% sinais. División enteira é con% /%, o que é moi difícil de ler cando está deseñada up na pantalla. Pode obter intervalos de números enteiros co colon. Así 2,5 lle vai dar un vector de todos os números de 2 a 5. Arrays son one-indexados, parafusos que unha morea de xente ata no caso de que están entre máis linguaxes de programación típicos, como C, onde a maioría as cousas son cero-indexada. Unha vez máis, este é o lugar onde a herdanza de R como unha linguaxe para como non programadores profesionais entra. Se vostede é un sociólogo ou un economista ou algo e está tentando usar R basicamente como subrogante ao seu máis importante traballo profesional, vai atopar one-indexar un pouco máis natural. Porque comezar a contar a 1 na vida cotiá, non 0. Para loops, isto é semellante ao a construción foreach en PHP, que vai ter que em-- aprender moi pronto. Que é para o valor no vector e a continuación, pode facer cousas con valor. Audiencia: Isto é chegar a charla. CONNOR HARRIS: Ah, iso é vir cara arriba conferencia, excelente. Audiencia: A asignación, é debería apuntar de dereita a esquerda? CONNOR HARRIS: Da dereita á esquerda, si. Podes pensar niso como o valor en dereito empurrado para a variable á esquerda. Audiencia: Aceptar. CONNOR HARRIS: E finalmente sintaxe da función é un pouco raro. Ten a foo nome da función, atribuída para esta función clave, seguido por todos os argumentos e, a continuación, o corpo da función tras iso. De novo, estas cousas poden parece un pouco raro. Eles van facer unha segunda natureza despois traballa coa linguaxe un pouco. Así, os vectores, o xeito construír un vector é vostede tipo C, que é unha palabra clave, a continuación, todos os números desexados ou cordas ou o que quere. Argumentos tamén ser vectores. Pero a matriz resultante queda achatada. Entón non pode ter matrices onde algúns elementos son números individuais e algúns elementos son propias matrices. Entón, se tentar construír un foron matriz do primeiro elemento é 4 eo segundo elemento é a matriz de 3,5 vostede é só incorporarse unha matriz de tres elementos, 4,3,5. Elas non poden ser de tipo mixto. Se tentar ler ou escribir fóra dos límites dun vector vai ter ese valor chamado NA unha que representa un valor en falta. E está dirixida a esta como estatísticos que están a traballar con conxuntos de datos incompletos. Se aplicar unha función que debería para dar só un número a unha matriz entón o que vai ter é o función pode mapear todo o array. Entón, se a súa función, digamos que leva un número e devolve-lo cadrados. Aplicar iso a matriz 2,3,5 O que vai ter é a matriz 4,9,25. E iso é moi útil porque significa que Non ten que escribir para loops para facendo cousas moi simples como aplicar unha función para todos os membros dun conxunto de datos. Que se está a traballar con gran conxuntos de datos, ten que facer unha chea. Funcións binarias son entrada aplicada pola entrada. Eu vou entrar niso. Pode acceder a eles con matrices ou vectores con corchetes. Entón soportes nome do vector cadrados 1 lle vai dar o primeiro elemento. Nome do vector corchetes 2 lle dará o segundo elemento. Pode pasar un vector de índices e vai volver para fóra, basicamente, un factor de sub. Para que poida facer vector de nomes de soportes C, 2,4 e vai saír un vector que contén o segundo eo cuarto elementos da matriz. E se quere só unha rápida estatística resumida dun vector como interquartile gama, mediana, máximo, sexa cal sexa, pode simplemente escribir resumo nome do vector e sacar iso. Iso non é realmente útil en programación, pero se está xogando en torno aos conxuntos de datos, é útil. Matrices-- basicamente matrices de dimensións máis elevadas. Teñen esa sintaxe especial notación. Matrix cunha matriz que queda cuberto em-- Sentímolo, matriz cos datos, número de liñas, número de columnas. Cando ten algúns datos, enche a matriz basicamente vai de arriba abaixo en primeiro lugar. Despois á esquerda para a dereita. Así, así. E R ten construído en multiplicacións matriz, descomposición espectral, diagonalization, unha morea de cousas. Se quere máis dimensional matrices, para 3, 4, 5, ou o que quere dimensións que pode facelo. A sintaxe é igual a c matriz din, a continuación, a lista das dimensións. Entón se queres unha matriz dimensional 4 con dimensións 4, 7, 8, 9, a matriz, din é igual a c (4,7,8,9). Acceder valores individuais con soportes primeira coma entrada segunda entrada. Pode obter franxas enteiras de filas ou columnas. Con esta sintaxe é incompleta só remar número coma ou columna coma número. Así, as listas son un tipo de matriz asociada. Teñen a súa propia sintaxe aquí. Unha vez máis non freneticamente copiar todo isto para abaixo. Este é só para que a xente pasando as diapositivas despois ter todo isto nunha fermosa referencia. E iso vai facer unha vez moi natural Realmente andar a través dos demos. Entón lista de matrices basicamente asociados. Pode acceder os valores con nome da lista, sinal de dólar, clave. Polo tanto, se a súa lista é nomeada foo, entón podes acceder a ela así. Pode obter un par clave-valor enteiro pasando o índice de paréntese. Se ler a partir dun non-existente clave, vai ter nulo. Non será erro. Cousa é, R vai facer como moito con nulo, xa que pode. E iso pode significar que se está non que esperan para nulo fóra dalgunha lista de lectura, vai ter algúns erros imprevisibles máis abaixo a liña. Isto aconteceu-me o meu cando traballo de verán que eu estaba usando R onde eu mudei como un certo lista foi definida nun punto pero non se alterou trala código que ler valores a partir del. E entón o que pasou foi que era lendo valores nulos fóra desta lista, pasando os en funcións, e ser moi confuso cando cheguei a todo tipo de infinidade aleatorios xurdindo nesta función. Porque se aplicar determinadas máximo ou funcións mínimas para null, pode obter valores infinitos para fóra. Os cadros de datos, son unha subclase de lista. Cada valor é un vector da mesma lonxitude. E son usados ​​para a presentación, basicamente, táboas de datos. Hai esa sintaxe de arranque. Isto todo vai, unha vez máis, ser moi máis claro cando comeza a demo. E a cousa agradable sobre cadros de datos é que pode dar nomes a todas as columnas e nomes para todas as liñas. E así que fai o acceso Los un pouco máis volto. Tamén é así que a maioría das funcións que ler datos de follas de cálculo de Excel ou a partir de arquivos de texto, por exemplo, vai ler nos seus datos. Van poñelas algún tipo de estrutura de datos. Así, as funcións no funcións sintaxe é un pouco raro. De novo, é o nome da función, asignar, esta función contrasinal e, a continuación, a lista de argumentos. Polo tanto, hai algunhas cousas agradables sobre como funciona a traballar aquí. Por unha banda, pode realmente asignar valores por defecto para certos argumentos. Entón pode dicir R1 equals-- pode dicir foo é unha función onde R1 é igual a algo por defecto, se o usuario especifica non hai argumentos. Se non, é todo o que colocou. E iso é moi útil porque moitas das nosas funcións teñen moitas veces decenas ou centos de argumentos. Por exemplo os de conspirar gráficos ou gráficos de dispersión de plotagem ter argumentos que controlan todo dende o título e do eixe etiquetas para a cor das liñas de regresión. E por iso, se non quere para facer a xente especificar cada un destes centos de argumentos controlar cada aspecto da un terreo ou unha regresión ou o que quere, é bo ter eses valores por defecto. E entón realmente pode escribir como viu aquí. Ou atopar un mellor exemplo. Cando chamar funcións que realmente pode chamalos usando os nomes de argumentos. Entón aquí está un exemplo de o constructor matriz. Leva tres argumentos. Normalmente ten datos, que é un vector. Ten N liña, que é o número de liñas. Ten N cols-- número de columnas. A cousa é se escribe N é igual a liña que quere e N é igual a calquera que sexa cando col está chamando esa función, realmente pode desfacer a eles. Entón pode pór N col primeira fileira e N segunda e vai facer ningunha diferenza. Entón esta é unha característica pouco agradable. Fixo importación e exportación. Isto pódese facer, basicamente. Hai tamén instalacións para escribir fóra arbitraria R obxectos nun ficheiro binario e, a continuación, le-los de volta máis tarde. Que é útil se está facendo unha gran sesión de R interactivo e precisa para salvar cousas moi rapidamente. Por defecto R ten un directorio de traballo que os arquivos son escritos para fóra e ler de novo a partir. Podes ver que con getwg, cambia-lo con setdw. Nada especialmente interesante aquí Entón, agora as estatísticas reais stuff-- regresión multilinear. Así, a sintaxe usual é un pouco complicado. O modelo é un gran obxecto basicamente. El se lle atribúe a lm, que é unha chamada de función. O primeiro elemento, a y- x1 til máis o que. Meu sintaxe aquí é un pouco confuso. Estou moi triste, iso é a forma estándar que os libros de ciencia da computación facelo. Pero é un pouco raro. Entón, basicamente, é lm parénteses, primeiro elemento é variable-- Sentímolo, dependente x1 til variable máis x2 máis porén moitos independente variables que ten. E, a continuación, estes poden ser tanto vectores, todo a mesma lonxitude. Ou poden ser columna cabeceiras nun cadro de datos que acaba de indicar o segundo cadro datos argumento. Tamén pode especificar unha fórmula máis complexa así que non ten que linearmente retroceder unha variable dependente un, ou un vector nun vector preexistente. Pode facer, por exemplo, un compoñente vector y ao cadrado máis 1 e retroceder que contra o rexistro dalgún outro vector. Pode imprimir os resumos da modelo con este comando chamada summary-- só resumo parens modelo. Novo outra cousa que eu debería aclarar. Outra cousa que vai corrixido cando os diapositivas subir en internet. Se quere só para calcular unha correlación simple pode usar vector correlación 1 vector 2 función central. Método é, por defecto Correlacións de Pearson. Estes son os patróns que podes facer. Hai tamén Spearman e Correlacións Kendell que son algúns variedade de correlación orde de clasificación. Ben, eles non calculan produto momentos entre os propios vectores, pero de ordes de clasificación do vector. Vou explicar iso máis tarde. Audiencia: Pregunta rápida CONNER HARRIS: Claro. Audiencia: Entón, cando está calculando para as correlacións simple facer asumir que hai unha estatística significado para a correlación? CONNER HARRIS: Non ten que. Unha película é basicamente só unha máquina. Terá en dúas cousas e só pode cuspir coeficientes para a mellor liña de axuste. Tamén relata estándar erros neses coeficientes. E só pode dicir, como é o secuestro estatisticamente significativa ou a diferenza entre 0. É a inclinación da mellor fit liña estatisticamente distinto de cero, etcétera. Por iso, asume nada, creo é mellor resposta para a súa pregunta. Aceptar. Plotting-- así a razón principal que debería usar R, como regresión múltiple. Basicamente todas as linguas Ten algunha facilidade para que. E honestamente sintaxe de R para regresión é un pouco misterioso. Pero plotagem é onde realmente brilla. A función é laborioso enredo e leva dous vectores, xe y. E, a continuación, as elipses representa un moi gran número de argumentos opcionais que controlar todo dende títulos de cores de varias liñas ou varios puntos, para o tipo de trama. Pode que de dispersión parcelas ou lotes de liña. [Inaudível] 2 vectores da mesma lonxitude. Pode preceder esta con achegar cadro de datos no seu guión. E iso permitirá que acaba de usar columna cabeceiras en vez de vectores separados. Podes engadir mellores liñas de axuste e locais curvas de regresión para a súa gráfica. Estes comandos listada aquí, liña e liñas ab, Por defecto estes chegar escrito en fiestras emerxentes porque asume que está a usar R interactivamente. Se non é posible escribir dous arquivos que realmente están en calquera formato que desexa. Sentímolo, eu teño un erro de dixitación Eu só entender. Se desexa abrir outro dispositivo gráfico pode usar esta función chamada ou PNG JPEG ou unha morea de outros formatos de imaxe. E pode escribir gráficos para calquera nome de ficheiro que se especifica. Para cancelar o que tes que use-- Non escribín iso no slide-- pero hai unha función chamada dev dot off que leva sen argumentos. Despois, hai instalacións para plotagem 3D e para contorno trazando se quere facer gráficos de dúas variables independentes. Non vou entrar neses agora. Hai tamén algúns son instalacións para animación aqueles son xeralmente mantidos por terceiros. Fixen animacións con gráficos de P, pero eu non usei eses terceiros bibliotecas. Entón, realmente non podo afirma de como son bos. O que eu recomendo se quere para facer animacións usando R é que pode escribir para fóra todos os cadros para as animacións e entón pode usar un program-- terceiro partido os típicos son chamados FFmpeg ou ImageMagick-- para costura todos os seus cadros nunha animación. Así, o tempo para demostración. Entón, se está a usar calquera Unix como sistema que é Linux BSD pero quen usa BSD. X abrir unha fiestra de terminal e escriba R na liña de comandos. Se tes R estudo ou semellantes, que tamén funciona. Para usuarios de Windows, ten que ser capaz de atopar R no seu menú Inicio. Debe ser chamado algo como R x64 3 puntos que sexa. Abre que alí enriba. Entón, agora déixeme só abra unha xanela de terminal. Todo ben, busca. Audiencia: -Space Command CONNER HARRIS: Command-Espazo, grazas. Eu normalmente non usan Macs. Terminal, amosar nova ventá. New window é definicións básico, R. Polo tanto, ten que obter unha mensaxe de benvida, algo así. Entón, eu estou usando R interactivamente. Tamén pode escribir guións de R curso. Basicamente scripts son executados exactamente da mesma maneira en que se está sentado fronte ao ordenador escribindo cada liña dunha de cada vez. Entón, imos comezar por facer un vector. Unha frecha C 1, 2. 1, 2, 4. OK, con certeza. Podo facer o tamaño do tipo de letra máis grande. Audiencia: Command-Plus CONNER HARRIS: Command-Plus. Command-Plus. Todo ben, que tal? Bo? Aceptar. Entón, imos comezar por declarando a lista vector. Facer, unha frecha, C 1,2,4. Vemos a. Non te preocupes co soporte de alí. Os soportes son por iso, se imprimir matrices moi longas, podemos onde está. Un exemplo sería se eu só quero intervalo 2-200. Se eu impreso moi longo matriz, os soportes son só para que eu poida manter o control de cal índice en que estamos Se eu estou buscando a través deste visualmente. Entón, de calquera forma, temos un. Entón eu dixen antes que as matrices de interacción moi ben con, por exemplo, operacións unários como este. Entón, o que pensas que eu vou obter si escribir un plus 1? Yep. Seguro, agora eu vou facer esa matriz diferente. Digamos b c 20,40, 80. Entón, o que pensas este comando pode facer? Engadir os elementos. E entón basicamente iso é o que fai. Entón iso é moi cómodo. Entón, eu como sobre fago iso. c é, digamos, 6 veces 1-10. Entón o que quero ver contido, que pensas? Así, todos múltiplos de seis. Agora, o que pensas Qué acontece se eu fago isto? Eu vou facelo un pouco máis claro, c, c. Entón o que ocorre, creo que, se fago iso? unha vantaxe C. [Inaudível] Audiencia: Calquera erro ou que só engade os primeiros tres elementos. CONNER HARRIS: Non é ben así. Isto é o que temos. O que pasa é un máis curto array, un, ten un ciclo. Entón, nós temos 124, 124, 124. Si. E, basicamente, pode ver este comportamento antes, un plus 1, como unha subclase desta conduta, onde a matriz máis curta é só o número 1, que é unha matriz de un elemento. Só estar dicindo vector todo tempo, no canto da matriz, porque iso é o que a r documentación normalmente fai. É un costume arraigado c. OK, e entón agora temos esa matriz. Polo tanto, temos esa matriz, c. Podemos obter resumo estatísticas de c, resumo c. E iso é bo. Entón agora imos facer algunhas cousas da matriz. Imos dicir que é unha matriz m. Imos facelo un tres por tres un. Así nRows é igual a 3, e ncols é igual a 3. E para os datos imos fazer-- entón o que pensas que iso vai facer? Correcto, é o seguinte. É nrow e nColumn. Entón o que eu fixen é que eu teño declarou unha matriz tres por tres e eu pase nunha matriz de nove elementos. Así, o logaritmo de todo o elementos dun a nove. E todos eses valores cubrir o array-- arrepentido? Audiencia: Estas son base 10 rexistros? CONNER HARRIS: Non, é rexistro logaritmos naturais, de xeito base e. Si, se quería de base 10 log, eu creo que ten para rexistrar o que quere, dividido por rexistro 10. E así os datos do [inaudível] só énchese a matriz, para arriba para abaixo, despois á esquerda para a dereita. E se quería facer algunha outra array, digamos que n é a matriz. Imos facer, eu non sei, 2-13. Ou eu vou facer algo máis interesante. Vou facer 2-4. nrow é igual a, digamos, tres. Ncol é igual a 4. n. Entón, nós temos iso. E agora, se queremos multiplicar estes, fariamos veces n cento por cento, porque iso n. E nós temos produtos de matriz. Por que forma, viu como cando eu declarei n, a 2-4 vector foi pedaleando ata que encheu todos n? Se quería tomar descomposición de valores propios, iso é algo que podemos facer moi facilmente. Podemos facer eigen n. E así, este é o noso primeiro atopou con unha lista. Entón eigen n é unha lista con dúas chaves. Valores, o que é esa matriz aquí. E vectores, que é esa matriz aquí. Entón, se quería extraer, digamos, esta terceira columna desde a matriz de vectores propios, porque os vectores propios son vectores columna. Entón o que podemos facer eigen vec sinal n dólar vectores, coma 3, do [inaudível]. Vec. É que, como podería esperar. Entón diga n veces veces por cento VEC. Así, o resultado aquí certamente parece se tomássemos terceiro valor propio aquí, que corresponde o terceiro vector propio. El só multiplicado todo este eigenvector, -componente sabio, polo valor propio. E iso é o que era de esperar, porque iso é o que son valores propios. Ten alguén aquí non tomado álxebra lineal? Unha parella de persoas, Aceptar. Pode conectar o seu cerebro fóra por un tempo. E, de feito, se tomamos eigen n valores sinal de dólar 3 veces VEC, ben obter o mesmo. É formato de forma diferente como unha liña vector, en vez de un vector de columna, pero é gran cousa. E así estes son basicamente o bo cousas que podemos facer con matrices, listas demostrados. I debe demostrar o bo cousas sobre funcións tamén. Entón, imos dizer-- [inaudível] función, chamada de let que func contra función n n ao cadrado en realidade, iso non é realmente o mellor. a, b, un cadrado máis b. Entón, unha cousa sobre funcións, de novo, é que Non precisa de instrucións de retorno explícitos. Así, pode só-- o última declaración avaliado será devolto a declaración, ou o valor devolto. Polo tanto, neste caso, estamos avaliando única unha declaración, un cadrado máis b. Ese será o valor de retorno defecto. Non custa nada para poñer en devolver valores explicitamente, especialmente se está lidando cun función da lóxica moi complicado fluír. Pero non precisa deles. Entón, agora podemos facer func 5, 1, e iso é basicamente o que esperar. Outra cousa que podemos facer, podemos realmente facer func b é igual a 1, a é igual a 5. Entón, se nós especificar cal o número aquí, que argumento ao que argumento na función, podemos virar ao redor estes valores onde queiramos. Audiencia: Existe unha razón para gravala-lo para fóra co b é igual en vez de só usar os números ea vírgula? CONNER HARRIS: Si, normalmente facelo se ten funcións con unha morea de argumentos. Isto pode adoitan ser como bandeiras que só quere que o raras ocasións. E deste xeito pode only-- vostede pode referirse aos argumentos específicos que quere empregar valores non estándar para, e non ten que escribir un banda de bandeiras é igual a false despois deles. Ou podo escribir isto de novo con un valor estándar como b é igual a 2. E entón eu podería facer f func, Vou facer 4, 1 polo de agora. E 17, que é 4 cadrado máis 1, como se podería esperar. Pero eu tamén podería só chamar esta con func 4, e eu vou estar 18, porque Non especificar b. Entón b recibe o valor por defecto de 2. OK, entón agora se está a continuación, xunto co demo, escriba esta liña no seu comando solicitar e ver o que xorde. En realidade, non fagas iso. Escribe iso. Ten que obter algo así. Entón mtcars é un construído en datos definir a esta demostración fins que vén com-- que vén por defecto coa súa distribución r. Esta é unha compilación de estatísticas de unha edición da revista Motor Trend 1974 sobre unha serie de diferentes modelos de coches. Polo tanto, hai millas por gala, cylinders-- Eu esquezo o que dispo é-- cabalos de potencia. Probablemente. Se acaba de coches Google MT, a continuación, un dos primeiros resultados será a partir da documentación oficial r e vai explicar todos estes campos de datos. Polo tanto, o peso é-- peso é peso do coche en toneladas. Q sec é o tempo de cuarto de milla. Entón, agora podemos facer algunhas cousas divertido sobre coches MT é un campo de datos. Así, podemos facer cousas como nomes de liña, coches mt. E esta é unha lista de todas as liñas en o conxunto de datos que son nomes de coches. Podemos facer COLNAMES, coches mt esta. Se fai coches MT, índice de sub-numérica, como 2. estivemos coa segunda columna de este, que sería cilindros. Audiencia: O que fixo? CONNER HARRIS: Eu escriba mt coches, soportes e, o que me deu o segundo columna de coches mt. Ou, se queremos unha liña, podo escribir mtcars coma 2, por exemplo. Outro round 2 coma, así. E iso vale na súa liña. Este aquí só dálle unha columna, pero como un vector de columna. Eu só entender agora esqueceuse de demostrar algunhas cousas legais sobre vectores que se pode facer con índices. Entón deixe-me facelo agora. Entón imos facer c poñendo gets-- isto pause-- 2 veces 1 a 10. Así, c é só será o vector de 2 a 20. Podo tomar elementos como este, c2. I pode pasar nun vector así, C-- deixarme usar o nome diferente do que c, como vec c. Basicamente, eu estou facendo iso para que non quede confundido como un C entre función da construción do vector, e, a continuación, c como un nome de variable. Soportes vec C 4, 5, 7. Isto vai me sacar do cuarto, quinto, e sete elementos da matriz. Podo facer VEC, poñer nun negativo índice, como negativa 4. Isto vai me aproveitar iso con o cuarto elemento eliminado. Entón, se eu quería facer franxas, Podo facer vec 2 a 6. 2 colonos 6 é só un vector, que é 2, 3, 4, 5, 6. Cospe iso. Entón, de calquera forma, de volta aos coches mt. Entón imos facer algunhas regresións. Digamos modelo gets-- imos linearmente regress-- Non sei. Primeiro imos facer achegar mtcars, por suposto. Entón, [inaudível] modelo lm, imos retroceder millas por gala sobre o peso til. E entón cadro de datos é mtcars. Entón modelo de resumo. OK, entón iso parece un pouco complicado. Pero, basicamente, a ver como se nós tentar expresar millas por gala como unha función lineal de peso, entón temos esta liña aquí, que intercepta a 37,28. 37.28 serían as millas teóricas por gala dun coche que pesa cero. E, a continuación, para cada tonelada adicional, bater uns cinco millas por gala fóra diso. Ambos estes coeficientes vostede pode ver, hai erros estándar. E son moi estatisticamente significativa. Así, podemos estar moi seguro de 1 e 10 a 10 para negativo. Así 1 veces algo para o negativo 10, que se fai un coche máis pesado, terá peores millas por gala. Ou podemos probar algún outro modelo. Como en vez de regredindo iso en peso, imos retroceder-lo no rexistro de peso, porque quizais o peso eficaz na milhagem non é dalgunha forma lineal. Isto nos deu unha r ao cadrado de 0,7528. Entón, imos tentar iso. Esta vez imos facer un variable diferente, tamén. Model2. Así resumo, model2. Todo ben, entón, de novo, temos a nosa mellor liña de axuste aquí. E este tempo-- este está dicindo: basicamente, que cada vez que aumentar o peso un coche por un factor de e perde iso moitas millas por gala. E por iso esta vez o noso patrón residual erro ele-- que non importa, realmente. O erro estándar residual é basicamente, só o erro estándar que deixou tras tomar a liña de tendencia de distancia. E o noso r ao cadrado aquí é de 0,81, que é un pouco mellor que o que tiñamos antes, 0,52. E agora imos engadir un termo a esta regresión. Entón, imos retroceder millas por gala tanto no rexistro dos pesos e, imos facer, q millas, tempo de cuarto de milla. OK, debe ter as-- todo ben, qsec. Qsec. Actually-- Sentímolo, o que? Deixe-me chamar ese algo máis aló model2. Deixe-me chamar ese model3. E entón agora podemos facer resumo model3. E entón, de novo, este é basicamente o que podería esperar. Ten interceptar positivo. O efectivo aumento peso é negativo. E a eficaz aumentando o tempo de cuarto de milla é positivo, pero aínda menos que o peso. Agora intuitivamente, pode facer o sentido de iso dicindo pensar en coches deportivos. Hai unha aceleración moi rápida, Un moi curta veces cuarto de milla. Eles están indo a usar máis gas, Considerando coches máis sensibles van ter aceleración máis lenta, cuarto de milla veces máis elevados, e usan menos gas ,, así millas por gala máis elevados. Gran. E entón agora é o momento de tramar algo así. Entón, imos fazer-- tan espida osos que podemos facer plots-- porque eu teño conectado este cadro de datos antes-- podemos só facer parcelas, mpg en peso. Fai deste un pouco maior. Alí, temos basicamente unha gráfico de dispersión, pero os puntos son medio difícil de ver sobre este asunto. Eu non me lembro o que o improvisar sintaxe é para cambiar a trama. Entón eu creo que iso vai ser un bo momento para traer, hai unha moi agradable axuda builtin recurso, citas de axuda funcionar nome. Nós imos causar-se, basicamente, calquera cousa que quere. Eu creo que realmente vou facelo Tipo de igual a p puntos parcelas. Será que isto cambia algo? E non, non realmente. Todo ben. Por algunha razón, cando eu fixen iso no meu propio ordenador hai un tempo, Todos os puntos de dispersión eran moito máis clara. En calquera caso, son o tipo de dispersión de visible? Non hai ninguén alí. Algúns alí, algúns alí. Pode clasificar de velos, non? Polo tanto, se queremos engadir unha liña de mellor axuste para este lote aquí, o que é un pouco espida bones-- déixeme facer-lle un pouco máis agradable. Principal igual contra peso. Millas por gala. Unha vez máis, podes ver o quão útil argumentos opcionais están aquí tamén non ter que poñer as cousas nun certa orde con argumentos de teclado cando ten parcelas, pois estes toman unha morea de argumentos. Xlab igual peso, peso, toneladas. Todo ben. OK, si, este dispositivo está a ser un pouco aburrido. Pero podes ver tipo de alí enriba, hai un título da gráfica do lado. Por aquí there's-- no fondo aquí hai etiquetas de eixo. Eu non me lembro de improvisar o que os mandos ars-- que as funcións son para aumentar o tamaño destes rótulos e títulos, pero eles están alí. E así, se queremos engade a mellor liña de axuste, poderíamos facer algo como-- I ten a sintaxe escrito aquí enriba. Entón lembre que acabamos de engadir modelo foi mpg, peso, mtcars. E así se eu quería engadir un mellor axuste liña, eu podería facer un modelo b liña. E o crecemento, temos unha liña de mellor axuste. É medio difícil de ver de novo. Estou moi triste no dificultades tecnolóxicas. Pero é executado basicamente esquina superior esquerda para ángulo inferior dereito. E se a escala foron maior, podería ver que a interceptación é o que pode atopar a partir das estatísticas de resumo se insire modelo de resumo. OK, entón eu espero que todo o mundo está algo de unha sensación de que R é, o que é bo para. Vostede podería facer moito mellor que parcelas iso no seu propio tempo, se lle gusta. Así, a interface de función externa. Isto é algo que non é tipicamente cuberto de conferencias introdutória ou algo introdutorio para r. Non é probable que vai ter del. Con todo, eu penso que sería útil en meus propios proxectos no pasado. E non hai ningunha boa tutorial para el en liña. Entón, eu estou indo só para apresura-lo durante todo este e entón está libre para saír. E así o estranxeiro interface de función que está pode usar para chamar a ver funcións cun R. Internamente, R está construído sobre aritmética de C. R é só 64 bits aritmética de punto flotante de C, que é o tipo double [inaudível]. E pode querer facer isto por unha morea de razóns. Por unha banda, R é interpretado, é non compilado abaixo para código de máquina. Así, pode reescribir o seu presillas internas en C e a continuación, obter a vantaxe de utilizar como R. é un pouco máis cómodo que C. Ten a mellor gráfica instalacións e outros enfeites. E mentres aínda está a ser capaz de obter velocidade máxima fóra das presillas internas, que é onde realmente precisa del. Reutilizar bibliotecas C existentes, que tamén é importante. Se ten algunha biblioteca C para como, Non sei, transformadas de Fourier, ou algún moi Arqueano procedemento estatístico utilizado en alta astrofísica enerxía ou algo así, eu non sei. Alta enerxía astrofísica non é nin sequera un pensamento, eu creo. Pero pode facelo en vez de ter para escribir un porto R nativa deles. E no as-- e outra vez, como se ollar na maioría das bibliotecas estándar do R, sobre os internos, os internos son vai utilizar a función externa interface moi extensivamente. Teñen cousas como Fourier transforma computación ou correlación coeficientes escrito en C, e só ten R wrappers en torno a eles. A interface é un pouco difícil. penso súa dificultade é esaxerada nun Moitas das instrucións que vai atopar. Pero, con todo, é un pouco confuso. E eu non teño sido capaz de atopar un bo tutorial para el, Entón é iso agora. Unha vez máis, este segmento enteiro é máis para referencia futura. Non hai problema con copia todo para abaixo no momento. Así, as seguintes instrucións son para sistemas Unix-like, Linux, BSD, VOS X. Non sei como funciona en Windows, pero por favor, non faga o proxecto final en Windows. Realmente non quere. Unix é moito mellor conxunto para programación casual. Entón, basicamente estranxeira interface de función. Se queres escribir un C función para uso con R, ten que tomar todo o argumentos como punteiros. Así, para valores individuais, esta significa que está apuntado para o valor. Para matrices, é dicir unha ligazón ao primeiro elemento, que é o que realmente significan os nomes de arrays. De novo, iso é algo que ten que ter pretty totalmente abaixo despois de p definir cinco. Nomes de arrays son só enlaces ao primeiro elemento, O tipo de punto flotante é o dobre. E a súa función debe volver void. O único xeito que pode realmente dicir o que pasou R é por modificación da memoria que R deron a el a través da función externa interface. Entón eu escribín este exemplo aquí, este é unha función que calcula uso produto escalar de dous vectores. Recibe dous argumentos, vec1, vec2, que son os propios vectores, e, a continuación, n, que é un lonxitude, porque unha vez máis, R foi construído en [inaudível] para descubrir a lonxitude de vectores, pero non fai C. En C, vectores é unha arbitraria delimitado anaco de memoria. Así, o xeito que poida calcular produtos de punto é só definir este parámetro para fóra a cero e entón percorrer a partir do 1 para protagonizar n, porque n é un punteiro para a lonxitude, basta engadir algo a iso parámetro. E iso pode ser unha boa práctica se está indo para facer esta a escribir dúas funcións C separados. Un deles has-- un deles só leva os argumentos e tipo que sería normalmente en C. Entón Leva unha matriz argumentos como punteiros. Pero os argumentos de valor único como n, el só ten como valores por copia, sen agullas. E entón iso non acontecer Punteiro [inaudível] fóra. E entón vostede pode ter unha persoa diferente, basicamente, función envoltorio que basicamente trata sobre os requisitos da función externa interface para ti. A xeito no que chamar iso de R é, xa ten a súa función escrita en C, escribe R shlib cmd, R mando biblioteca compartida, foo punto c, ou o que quere o nome do ficheiro é, eo sistema operativo non desembolsa na terminal R. E iso vai crear unha biblioteca chamada foo dot-lo. E entón podes cargalo en noso script ou interactivamente con mando de carga dyn punto. Despois, hai unha función en R chamado punto c. Isto leva argumentos que son primeiro o nome da función en C que quere chamar. E entón todos os parámetros á función que desempeña, teñen que ser na orde adecuada. Tes que usar este tipo funcións de coerción como un número enteiro, como parella, como personaxe, e como lóxica. E entón, cando retorna o lista, que de novo é só unha matriz asociada do nomes de parámetros e valores tras a función foi executado. Polo tanto, neste caso, porque ten prod dot argumentos vec1, vec2, e int n, n out. Para dot c temos prod punto, o nome da función estamos chamando, vec1, vec2, tipo coerce. A lonxitude de calquera vector, Só escollín vec1 arbitrariamente. Sería máis robusta quere dicir s lonxitude enteiro de vec1 min, lonxitude vec2. Entón, así como dobre cero, porque realmente non importa o que vai ao out parámetro porque somos definíndose a cero de calquera maneira. E entón os resultados van ser unha gran variedade de asociado, basicamente, vec1 é o que quere, vec2 é o que quere. Pero estamos interesados ​​en a fóra, para que poidamos aproveitar iso. Esta é unha vez máis, un exemplo moi xoguete dunha función de interface externa. Pero se ten que computar dot produtos de vectores masivas en loops, ou se ten que facer outra cousa nun loop, e non quere contar con R, que ten un pouco de sobrecarga embutido, isto pode ser útil. De novo, isto non é xeralmente un tema introdutorio para R. Non é moi ben documentado. Eu só estou incluíndose o porque Eu penso que sería útil no pasado. Prácticas Entón, malas. Eu mencionar que hai unha loop for na función. Xeralmente non debe, en a lingua, non usalo. Con base en como R aplica iteración internamente, o mesmo pode ser lento. Eles só ollar feo tamén. R trata sobre vectores moi ben, por iso, moitas veces non precisa usalo. Despois, pode normalmente substituír un vector frecuentemente con estas funcións chamadas de alta funcións de orde, Mapa, Reducir, Buscar, ou filtro. Vou só dar algúns exemplos do que estes fan. Mapa é unha función de orde superior porque é preciso unha función como un argumento. Así, pode dar-lle unha función, pode darlle unha matriz, e que vai aplicar a función para cada elemento da matriz e voltar a nova matriz. Reducir, basicamente dá un array, dá a el unha función que leva dous argumentos. Será aplicable a función en primeiro lugar, a primeiro argumento con algún valor inicial. A continuación a ese resultado na segunda. A continuación a ese resultado no terceiro, a continuación, para ese resultado na cuarta. E, a continuación, voltar cando se chega ao final. Así, por exemplo, se quere calcular a suma de todos os elementos nunha matriz, que se pode chamar de reducir con [inaudível] reducir un complemento función, como func a, b, volver a máis b. E, a continuación, iniciar un valor de 0. E todo iso, pode atopalos describe na documentación R, en calquera libro sobre programación funcional. Hai tamén esa clase de funcións chamadas aplicar funcións, que don't-- son un pouco difícil de explicar, pero se ollar en [inaudível] reservado que citei ao comezo, explica-los moi ben en seu apéndice sobre a programación R. Máis sobre prácticas, engadíndose a vectores. Si? Eu creo que eu debería corrixir isto. Nesa primeira liña, frecha vec, que a frecha non debería estar alí. Pode atribuír a un vector, unha vez máis, por a súa lonxitude máis 1 e asignar algún valor para que. Isto vai estender o vector, ou pode facer equals c VEC, newvalue VEC. De novo, se usa C con un argumento como un vector, a xerarquía resultante queda achatada. Entón só vai obter un vector que é prorrogado por un. Nunca faga iso. A razón pola que non debe facelo é isto. Cando asignar un vector, el dálle un certo pedazo de memoria. Se aumentar ese tamaño do vector, ten que recolocar o vector noutro lugar. E así realocação é moi caro. Non vou entrar en detalles de como alocadores de memoria son aplicados no nivel de sistema operativo, pero ten unha morea de tempo para atopar un novo bloque de memoria. E tamén, se está re-distribución de lotes e lotes de progresivamente maior Anacos, acaba con algo chamado fragmentación de memoria, onde a memoria dispoñible é dividido en moitos pequenos bloques ao momento de vista alocadores de memoria. E queda cada vez máis difícil atopar memoria para outras cousas. Entón, en vez, se precisa facer isto, se precisa para crecer un vector dunha extremidade para o outro, en vez de achegar a el constantemente, ten que pre-reservar-lo. Vec frecha, lonxitude do vector é igual a 1.000, ou o que quere. E entón podes só asignar para valores de un dos vectores un tempo despois de lle atribúe unha vez. Corre para este, unha vez máis, o meu traballo de verán cando estaba escribindo NRA diferencial Solve ecuación. Non simbólica numérica. A idea é que unha vez que ten un valor para a súa solución, que utiliza para calcular a próxima. Entón, meu inxenuo naturais inclinación era para dicir ben, así que vou comezar con un vector iso é un valor substancial. Calcule de que o seguinte valor que vai á miña solución de vectores, e engadir isto. Crear algo máis, engadir isto. Foi moi, moi lentamente. E cando eu entender iso e eu mudei o meu sistema anexando á presente vector como 10.000 a 100.000 veces, só para pre-reservar un vector e só correr con iso. Teño máis de 1.000 veces a velocidade superior. Polo tanto, este é un moi común trampa para R programación. Se precisa para construír un vector peza por peza, pre-reservar-lo. Outra viaxe común up-- esta é a miña última foto, non worry-- é o tratamento de erros. R, para ser franco, non fai realmente facelo moi ben. Hai unha gran cantidade de problemas que poden xurdir. Por exemplo, se recibe un array ou un vector a partir dunha función que estaba esperando un único valor de veu, ou viceversa, e pasar isto para unha función que escribiu que espera un único valor, que pode ser un problema. Certas funcións voltar nulo como fan, por exemplo, a partir dunha lectura clave inexistente nunha lista. Pero nulo non é como C onde se tentar ler a partir dun punteiro de idade, [inaudível] punteiro para null, el só SEG fallos e se está no seu depurador lo lle di exactamente onde está. Pola contra, null será fazer-- funcións vai facer cousas imprevisibles se son nulos handed. Como se está entregado max nulo, el lle vai dar o infinito negativo. E así, si. E así que isto aconteceu para min de novo, cando tiña cambiou moito campos na miña lista de estrutura xa sen cambia-los noutro lugar cando estaba lendo a partir deles. E entón eu teño todo tipo de aleatorio resultados infinidade xurdindo e eu nin idea de onde viñeron. E, por desgraza, non hai ningún xeito estrito certo R onde pode dicir algo parece que podería ser un erro, pode deixar aí para que eu poida ser disciplinado e corrixir isto. Con todo, hai algo chamado parada se non. Isto é equivalente a assert de C, se xa falamos sobre iso. Eu non creo que afirman C é un tema de conferencias, pero o seu líder de sección podería ir sobre el. E deixe de basicamente non ten ningunha predicado, polo tanto, calquera declaración que pode ser verdadeira ou falsa. E se é falsa, el deixa de seu programa. Dille o que liña foron e que condición fallou. E iso moi útil, por exemplo, verificación de sanidade, entradas de función. Entón, se ten unha función e espera que, digamos, se debería dar unha data, quero as datas ser só un vector de lonxitude 1 e nalgún lugar entre o 1 e 31. E se non, sei algo está mal. E eu decide deixar alí antes de este ten batida aleatoria en efectos con código que é máis difícil de rastrexar completamente. Entón esta é unha posible usar para deixar se non. En calquera caso, Aceptar. Entón, iso é o final. Moitas grazas por vir. Eu son un afeccionado neste. Entón, desculpe se está aburrido ou confusa ou que o teñen. Estou feliz de ter preguntas por correo electrónico en connorharris@college.harvard.edu. Isto vale tamén para todos vendo iso viven ou máis tarde. Ademais, aínda que eu non son un TF, eu tamén estou moi dispostos a servir como un non-oficial conselleiro para quen é R usando nun proxecto final. Se desexa que a continuación, só fale co seu TF e, a continuación, escriba me un e-mail así Sei o que está a traballar e para que eu poida configurar reunión veces con vostede, se queres. Entón, de novo, moitas grazas. Espero que teñan gusto. Audiencia: [inaudível]. CONNER HARRIS: Claro. Audiencia: Que tipo de proxecto sería un estudante CS usar R para? CONNER HARRIS: Entón, se non está facer algo que é puramente en minería de datos, por exemplo, e non hai moitas cousas podería facer que os datos minería e aprendizaxe de máquina. Pode querer usar R para un compoñente de algo. Eu trouxo, orixinalmente, o exemplo de se está escribindo un sitio e quere realizar automática análise estatística do servidor rexistros nun determinado período de tempo todos os días, que pode ser algo que é moi fácil de facer en só unha breve R guión que pode programar para realizar todas as noites, por exemplo. E estou seguro que si non hai ningunha razón que quere estatísticas ou capacidades gráficas e ter esta carreira automaticamente no canto de ter que interactuar con cousas en Excel, por exemplo, isto é algo pode querer usar para R. Entón, máis preguntas antes de saír? Non? Todo ben, ben, unha vez máis, grazas Moi por vir.