Curso de R - Programación con R - af · PDF fileCurso de Programación en R Ibon...

download Curso de R - Programación con R - af · PDF fileCurso de Programación en R Ibon Martínez   ´µ¸¹½  Agosto2011 – p. 1/35

If you can't read please download the document

Transcript of Curso de R - Programación con R - af · PDF fileCurso de Programación en R Ibon...

  • Curso de Programacin en RIbon Martnez

    http://fdesnedecor.wordpress.com/

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 1/35

  • Programacin Prctica con R

    Ya que hemos echado un vistazo general a la funcionalidad de R, volvamos

    por un momento a su uso como lenguaje de programacin. Veremosdiferentes ejemplos e intentaremos implementarlos en R.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 2/35

  • Variables

    Hay que considerar que cuando se programa en R podemos utilizar todos losobjetos de R: Data frames, Listas, Arrays, Matrices, Vectores, . . . . Adems,

    cada objeto est compuesto de un tipo bsico de elementos, que pueden ser:

    integer

    double

    character

    logical: que puede tomar los valores TRUE, FALSE o NA.

    factor o categorical

    En R no hace definir previamente las variables, nicamente se asigna el valorque queramos.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 3/35

  • Variables

    > a a

    [1] 3

    > v v

    [1] TRUE FALSE TRUE

    > t t

    [1] "Una cadena de texto"

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 4/35

  • Variables

    Como hemos visto, l modo de asignacin por defecto es assign("mivariable", 3.141592)

    > mivariable

    [1] 3.141592

    > "prueba" "prueba"

    [1] "prueba"

    > get("prueba")

    [1] 10

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 5/35

  • Bucles y vectorizacin

    Una ventaja de R comparado con otros programas estadsticos con menus y

    botones es la posibilidad de programar de una manera muy sencilla una seriede anlisis que se puedan ejecutar de manera sucesiva.

    Esto es comn a cualquier otro lenguaje de programacin, pero R poseecaractersticas muy particulares que hacen posible programar sin muchos

    conocimientos o experiencia previa en programacin.

    Como en otros lenguajes, R posee estructuras de control que no son muy

    diferentes a las de un lenguaje de alto nivel como C, C++, VB, FORTRAN, . . .Supongamos que tenemos un vector x, y para cada elemento de x con valor

    igual a b, queremos asignar el valor 0 a otra variable y, o sino asignarle 1.Primero creamos un vector y de la misma longitud de x:

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 6/35

  • Bucles y vectorizacin

    > b x y for (i in 1:length(x)) if (x[i] == b) y[i] y

    [1] 1 1 1 1 0

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 7/35

  • Bucles y vectorizacin

    Tambin se pueden usar corchetes para ejecutar varias instrucciones:

    > for (i in 1:length(x)) {

    + y[i] if (x[i] == b) {

    + y[i]

  • Bucles y vectorizacin

    Sin embargo, este tipo de bucles y estructuras se pueden evitar gracias a una

    caracterstica clave en R: vectorizacin. La vectorizacin hace los buclesimplcitos en las expresiones. Por ejemplo, consideremos la suma de dos

    vectores:

    > z x

    [1] 4 5 2 1 3

    > y

    [1] 1 1 1 1 0

    > z

    [1] 5 6 3 2 3

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 9/35

  • Bucles y vectorizacin

    Esta suma se hubiera podido escribir como un bucle, como se hace enmuchos otros lenguajes:

    > z for (i in 1:length(z)) z[i] z

    [1] 5 6 3 2 3

    En este caso, es necesario crear con anterioridad el vector z por la necesidadde indexar los elementos. Es fcil ver que este bucle explcito solo funciona si

    x e y son de la misma longitud.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 10/35

  • Bucles y vectorizacin

    Las ejecuciones condicionales (if . . . else) se pueden evitar con el uso de

    indexacin lgica; volviendo al ejemplo anterior:

    > x == b

    [1] FALSE FALSE FALSE FALSE TRUE

    > y[x == b] y[x != b]

  • Bucles y vectorizacin

    Tambin existen varias funciones del tipo applya que evitan el uso de bucles.

    La funcin apply() acta sobre las filas o columnas de una matriz, y su sintaxises apply(X, MARGIN, FUN, . . . ), donde X es una matriz, MARGIN indica si se

    van a usar las filas (1), las columnas (2), o ambas (c(1, 2)), FUN es unafuncin (o un operador, pero en este caso debe especificarse en corchetes) a

    ser aplicada.

    > x y X apply(X, 2, mean)

    x y

    -5.005757 5.336591

    aapply, lapply, mapply, sapply, tapply

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 12/35

  • Bucles y vectorizacin

    La funcin lapply() acta sobre una lista. Su sintaxis es similar a la de apply y

    devuelve una lista.

    > forms lapply(forms, lm)

    [[1]]

    Call:

    FUN(formula = X[[1L]])

    Coefficients:

    (Intercept) x

    36.152 6.156

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 13/35

  • Bucles y vectorizacin

    La funcin sapply() es una variacin ms flexible de lapply() que puede tomar

    un vector o una matriz como argumento principal, y devuelve los resultados enuna manera ms amigable, generalmente en una tabla.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 14/35

  • Escribiendo un programa en R

    Los programas en R se escriben en un archivo que se guarda en formato

    ASCII con terminacin .R. Un programa se usa cuando uno quiere hacer unao varias operaciones muchas veces. En nuestro primer ejemplo, queremos

    hacer el mismo alisis de regresin para una serie de datos que estn en tresarchivos diferentes. Procederemos paso a paso y veremos diferentes maneras

    de programar este problema.

    Primero, hagamos nuestro programa de la manera ms intuitiva posible

    ejecutando sucesivamente los comandos necesarios, teniendo cuidado departicionar el dispositivo grfico con anterioridad.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 15/35

  • Escribiendo un programa en R

    > layout(matrix(1:3, 1, 3))

    > data plot(data$Sepal.Length, data$Sepal.Width, type = "p")

    > title("setosa")

    > data plot(data$Sepal.Length, data$Sepal.Width, type = "p")

    > title("versicolor")

    > data plot(data$Sepal.Length, data$Sepal.Width, type = "p")

    > title("virginica")

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 16/35

  • Escribiendo un programa en R

    4.5 5.0 5.5

    2.5

    3.0

    3.5

    4.0

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    setosa

    5.0 5.5 6.0 6.5 7.0

    2.0

    2.4

    2.8

    3.2

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    versicolor

    5.0 6.0 7.0 8.0

    2.5

    3.0

    3.5

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    virginica

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 17/35

  • Escribiendo un programa en R

    El problema del primer programa es que se puede volver bastante largo siqueremos agregar otras especies. Ms an, algunos comandos se ejecutan

    varias veces, y por lo tanto, se pueden agrupar y ejecutar juntos cambiandoalgunos argumentos. La estrategia que usamos aqui es poner estos

    argumentos en vectores de tipo caracter, y despus usar indexacin paraacceder a los diferentes valores.

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 18/35

  • Escribiendo un programa en R

    > layout(matrix(1:3, 1, 3))

    > especie fichero for (i in 1:length(especie)) {

    + data

  • Escribiendo un programa en R

    4.5 5.0 5.5

    2.5

    3.0

    3.5

    4.0

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    setosa

    5.0 5.5 6.0 6.5 7.0

    2.0

    2.4

    2.8

    3.2

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    versicolor

    5.0 6.0 7.0 8.0

    2.5

    3.0

    3.5

    data$Sepal.Length

    data

    $Sep

    al.W

    idth

    virginica

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 20/35

  • Escribiendo un programa en R

    Observamos que el argumento file[i] no se pone entre comillas en read.table()

    ya que este argumento ya es de tipo caracter.

    Ahora nuestro programa es mucho ms compacto. Es ms fcil agregar otras

    especies ya que los nombres de las mismas estn en vectores al principio delprograma.

    Los programas anteriores funcionarn correctamente siempre y cuando losarchivos de datos .dat estn localizados en el directorio de trabajo de R; de

    lo contrario el usuario debe cambiar el directorio de trabajo o especificar ladireccin completa en el programaa

    aImportancia de las estructuras de carpetas y ficheros

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 21/35

  • Creando nuestras funciones en R

    Hemos visto que la mayor parte del trabajo en R se realiza a travs de

    funciones con sus respectivos argumentos entre parntesis. R nos permiteescribir nuestras propias funciones.

    sto, nos permite un uso flexible, eficiente y racional de R. Volvamos anuestro ejemplo donde leemos unos datos y dibujamos una grfica de los

    mismos. Si deseamos hacer esta operacin en diferentes situaciones, puedeser una buena idea escribir una funcin:

    http://fdesnedecor.wordpress.com/, Agosto 2011 p. 22/35

  • Creando nuestras funciones en R

    > mifun

  • Creando nuestras funciones en R

    Para que esta funcin pueda ser ejecutada, primero es necesario cargarla en

    memoria, y esto se puede hacer de varias maneras. Las lneas de la funcinse pueden escribir directamente desde el teclado, como cualquier otro

    comando, o ser copiada y pegada a un editor de texto. Si la funcin estguardada en un archivo ASCII, se pu