Examen extraordinario 29-jun-2020

Índice

1 condiciones

  • Justifica las respuestas.
  • Se valorarán
    • el grado de automatización;
    • la comprobación de los resultados.

2 enunciados

  1. (2 puntos) Escribe una función en R llamada sumario que
    • aplicada a un dataframe, diga cuántas variables numéricas y cuántos factores tiene:
      > sumario (mtcars)       
      0 factores y 11 numéricas
      > sumario (ChickWeight)  
      2 factores y 2 numéricas
      
    • aplicada a una regresión lineal, devuelva los coeficientes de regresión significativos al 5% y el coeficiente de determinación:
      > sumario (lm (mpg ~ ., mtcars))
      Ningún coeficiente significativo
      > sumario (lm (Speed ~ ., morley))
      (Intercept)        Expt          R2 
      913.2447368 -19.0500000   0.1181058
      
    sumario  <- function (x)
        if (is.data.frame (x))
             cat (sum (sapply (x, is.factor)), "factores y",
                  sum (sapply (x, is.numeric)), "numéricas\n") else
        {
            s <- summary (x)
            c <- s$coefficients
            coesig <- c[c[,"Pr(>|t|)"]<0.05,"Estimate"]
            if (length (coesig) == 0)
                cat ("Ningún coeficiente significativo\n")
            else c (coesig, R2 = s$r.squared)
        }
    
  2. (1 punto) Escribe una función en R que tomo como argumento un vector x y devuelva
    • una lista de parejas
    • una lista de tríos
    • una lista de todos los subconjuntos de orden k < n=length(x)

    Por ejemplo,

                        # devuelve una lista con estos elementos:
    parejas(1:4)        # 12 13 14 23 24 34
    trios(1:4)          # 123 124 134 234
    subconjuntos(1:4,1) # 1 2 3 4
    subconjuntos(1:4,4) # 1234
    
    parejas <- function (lista)
    {
        resul <- list()
        n <- length(lista)
        for (i in 1:(n-1))
            for (j in (i+1):n)
                resul <- c (resul, list(c(i,j)))
        resul
    }
    trios <- function (lista)
    {
        resul <- list()
        n <- length(lista)
        for (i in 1:(n-2))
            for (j in (i+1):(n-1))
                for (k in (j+1):n)
                    resul <- c (resul, list(c(i,j,k)))
        resul
    }
    
    subconjuntos <- function (x, k)
    {
        if (k == 1) return (as.list (x))
        n <- length(x)
        cadena <- paste0("lista <- list(); for (i1 in 1:",n-k+1,")")
        for (i in 2:k)
            cadena <- paste0 (cadena,
                              "for (i", i, " in (i", i-1, "+1):", n-k+i, ")")
        cadena <- paste (cadena, "lista <- c(lista, list(c(",
                         paste0("i", 1:k, collapse=","), "))); lista")
        eval (parse (text=cadena))
    }
    
    ## otra forma:
    
    subconjuntos <- function (lista, k)
        combn (lista, k, simplify=FALSE)
    
    parejas <- function (lista) subconjuntos (lista, 2)
    
    trios   <- function (lista) subconjuntos (lista, 3)
    
  3. Escribe una función en R que tome como argumento una cadena y devuelva verdadero si es un palíndromo y falso en otro caso:
    1. (1 punto) el argumento se considera una palabra:
      palindromo ("salas")   # TRUE
      palindromo ("alas")    # FALSE
      
    2. (0,5 puntos) el argumento puede ser una frase
      palindromo ("dabale arroz a la zorra el abad")   # TRUE
      
    3. (0,5 puntos) además, puede contener vocales acentuadas
      palindromo ("dábale arroz a la zorra el abad")   # TRUE
      
    palindromo1a <- function (cadena)
    {
        letras <- strsplit (cadena, "") [[1]]
        identical (letras, rev(letras))
    }
    
    palindromo1b <- function (cadena)
    {
        n <- nchar (cadena)
        all (sapply (1:(n/2),
                     function (i)
                         substring(cadena,i,i) == substring(cadena,n-i+1,n-i+1)))
    }
    
    palindromo2 <- function (cadena)
        palindromo1a (gsub (" ", "", cadena))
    
    palindromo <- function (cadena)
        palindromo2 (chartr ("áéíóú", "aeiou", cadena))
    
  4. (1 punto) Genera un documento PDF que contenga, en la página i-ésima, una gráfica del crecimento de pollo (Chick) i-ésimo del dataframe ChickWeight: abscisas Time y ordenadas weight.
    pdf ("ejercicio4.pdf")
    for (i in levels(ChickWeight$Chick))
      plot (weight ~ Time, ChickWeight, subset=Chick==i, type="l")
    dev.off ()
    
  5. (1 punto) En esta carpeta hay datos sobre vuelos en Estados Unidos. Hay un fichero por cada año (los que empiezan por 1987 … 2008). Implementa un programa en R que cargue en un dataframe mil registros de cada uno de esos ficheros, muestreados al azar.
    lista <- lapply (1987:2008,
                     function (año)
                     {
                         nombre <- paste0 (año, ".csv.bz2")
                         servidor <- paste0 ("http://bellman.ciencias.uniovi.es/~carleos/",
                                             "master/manadine/curso1/TIplE/ejercicios/datos/vuelos/")
                         download.file (paste0 (servidor, nombre),
                                        nombre)
                         completo <- read.csv (bzfile (nombre))
                         completo[sample(nrow(completo),1000),]
                     })
    datos <- do.call (rbind, lista)
    

Autor: Carlos Enrique Carleos Artime

Created: 2020-06-30 mar 17:57

Emacs 25.2.2 (Org mode 8.2.10)

Validate