soluciones

  1. Definir una función que, dados los coeficientes «a,b,c» de una ecuación de segundo grado (\(a x^2 + b x + c = 0\)), devuelva sus raíces reales (sin parte imaginaria), en caso de haberlas.
    resolver2grado <- function (a, b, c) {
      d <- b^2 - 4*a*c # discriminante
      if (d > 0) (-b + c(-1,1) * sqrt(d)) / (2 * a)
      else if (d == 0) -b / 2 / a
      else {warning ("sin solución real"); c()}
    }
    
  2. Ídem pero devolviendo siempre dos soluciones complejas.
    resolver2grado <- function (a, b, c)
      (-b + c(-1,1) * sqrt (b^2 - 4 * a * c + 0i)) / (2 * a)
    ## o bien:
    resolver2grado <- function (a, b, c)
      (-b + c(-1,1) * sqrt (as.complex (b^2 - 4 * a * c))) / (2 * a)
    
  3. Se define el fectorial del entero \(z\in\mathbf{Z}\) como \[ \mathcal F(z) = \prod_{i=z}^{-1}\,i %= i\cdot(i+1)\cdots(-2)\cdot(-1) \] o bien, recursivamente, como \[ \mathcal F(-1) = -1\qquad \mathcal F(z) = z\cdot\mathcal F(z') \] donde \(z'=z+1\) si \(z<-1\) y \(z'=z-1\) si \(z>-1\).

    Escribe una función en R que calcule el fectorial de su argumento.

    ## versio'n iterativa
    fectorial <- function (n) {
        producto <- 1
        for (i in n:-1) producto <- producto * i
        producto
    }
    ## versio'n recursiva
    fectorial <- function (n)
        if (n == -1) -1 else n * fectorial (n + ifelse(n>=0, -1, 1))
    ## versio'n vectorial
    fectorial <- function (n) prod (n:-1)
    
  4. Dibujar la función de densidad de una distribución ji-cuadrado de 5 grados de libertad.

    Sombrear las dos colas del 5% de probabilidad cada una, es decir, del 0 al percentil 5 y del percentil 95 hasta «infinito».

    minx <- 0; maxx <- qchisq(0.99,5)
    plot (x <- seq(minx,maxx,0.01), dchisq (x, 5), type="l")
    lines (x <- seq(minx,qchisq(0.05,5),0.001), dchisq (x, 5), type="h")
    lines (x <- seq(qchisq(0.95,5),maxx,0.001), dchisq (x, 5), type="h")
    
  5. Hacer un diagrama de dispersión de la longitud de pétalo frente a la longitud de sépalo, con los datos del dataframe «iris» (si no estuviera, ejecutar «library(datasets);data(iris)»).

    Que la setosa aparezcan de color rojo; las versicolor, de color azul; y las virginica, de verde.

    plot (Petal.Length ~ Sepal.Length, iris, color = rep (c("red","blue","green"), each=50))
    
  6. Definir una variable «m» que contenga en la celda «i;j» el valor de «i» \(\times\) «j».
    m <- matrix (NA, 10, 10)
    for (i in 1:10) for (j in 1:10) m[i,j] <- i * j
    # otra opción
    for (i in 1:10) m[i,] <- i * 1:10
    
  7. Definir una variable «m» que contenga por ejemplo en la celda «3;5» una cadena con el texto "3 × 5 = 15".
    m <- matrix (NA, 10, 10)
    for (i in 1:10) for (j in 1:10) m[i,j] <- paste (i, "×", j, "=", i * j)
    
  8. Definir una variable «d» que sea un dataframe de 1000 filas y que
    • la primera columna sean valores aleatorios de una uniforme U(0;1)
    • la segunda, aleatorios gausianos N(170;15)
    • la tercera, aleatorios exponenciales de esperanza 5
    • la cuarta, aleatorios puasones de esperanza 20
    • la quinta, letras aleatorias del alfabeto inglés (variable «letters») con la misma probabilidad
    • la sexta, vocales (a, e, i, o, u) aleatorias donde la «u» tenga el doble de probabilidad que cada una de las otras
    unif <- runif (1000, 0, 1)
    gaus <- rnorm (1000, 170, 15)
    expo <- rexp  (1000, 1/5)
    puas <- rpois (1000, 20)
    letr <- sample (letters, 1000, replace=TRUE)
    voca <- sample (c("a","e","i","o","u"), 1000, replace=TRUE, prob=c(1,1,1,1,2))
    d <- data.frame (unif, gaus, expo, puas, letr, voca)
    
  9. Obtener sendos vectores de nombres de variables cuantitativas y cualitativas de «d».
    cuantitativas <- cualitativas <- c()
    for (i in 1:ncol(d))
      if (is.numeric (d[[i]]))
          cuantitativas <- c (cuantitativas, names(d)[i])
      else cualitativas <- c (cualitativas,  names(d)[i])
    # otra forma
    cuantitativas <- names (d) [sapply (d, is.factor)]
    cualitativas  <- names (d) [sapply (d, is.numeric)]
    
  10. Definir una lista «l» de longitud 6 tal que su elemento «i»-ésimo sea el resultado de aplicar «summary» a la «i»-ésima variable de «d».
    # una forma:
    l <- list(); for (i in 1:6) l <- c (l, list (summary (d[,i])))
    # otra forma:
    l <- list(); for (i in 1:6) l[[i]] <- summary (d[,i])
    # otra forma:
    l <- lapply (d, summary)
    
  11. Añadir nombres a la lista para identificar cada sumario con su variable.
    names (l) <- names (d)
    # otra forma (resultado distinto)
    l <- list(); for (i in 1:6) l[[i]] <- list (names(d)[i], summary(d[,i]))
    
  12. Considerar los datos «mtcars». Obtener una lista que contenga por la media y desviación típica de «mpg» por cada valor de «cyl».
    lista <- by (mtcars$mpg, mtcars$cyl, function (x) c (mean (x), sd (x)))
    
  13. Generar 10.000 valores de medias muestrales de muestras de tamaño 100 de una población gausiana de esperanza 170 y desviación típica 15. Calcular la desviación típica de las medias muestrales.
    medias <- replicate (10000, rnorm (100, 170, 15))
    sd (medias) # debería estar en torno a 1,5 = 15÷√100
    

Author: Carleos Artime

Created: 2018-10-23 mar 23:37

Emacs 25.1.1 (Org mode 8.2.10)

Validate