Desafío 1

Variables
a = 15
b = 30
c = 0
d = 3.14159265
vec = c(1, 2, 3, 4, 5)
vec2 = c(2, 4, 8, 10)

round

round(d, 2) # redondear a 2 decimales
## [1] 3.14

abs

abs(-1*d) # valor absoluto
## [1] 3.141593

factorial

factorial(a) # factorial de 15
## [1] 1.307674e+12

exp

exp(d) # exponencial
## [1] 23.14069

tan

tan(d) # tangente
## [1] -3.589793e-09

atan

atan(d) # arco tangente de d
## [1] 1.262627

sum

sum(vec) # suma los elementos de un vector
## [1] 15

modulo (%)

5 %% 2
## [1] 1

Cociente (%/%)

7 %/% 3 #
## [1] 2

floor

floor(3.9) # redondea hacia abajo al entero más cercano
## [1] 3

Desafío 2

Table

El código genera una tabla de conversión de grados Fahrenheit a Celsius utilizando una secuencia de números que van desde 0 hasta 100, incrementando en 10 en cada paso. La función “f_to_c” se encarga de convertir los grados Fahrenheit en grados Celsius utilizando la fórmula correspondiente. A continuación, se crea una matriz “table” combinando los datos de Fahrenheit y Celsius en dos columnas y se imprime la tabla en la consola utilizando la función “print”, especificando los nombres de las columnas como “Fahrenheit” y “Celsius”. En resumen, el código utiliza una secuencia numérica, una función de conversión y una matriz para generar una tabla de conversión de grados Fahrenheit a Celsius.

fahrenheit = seq(0, 100, by = 10)

# Function Fahrenheit a Celsius
f_to_c = function(temp) {
  (temp - 32) * 5 / 9
}

celsius = f_to_c(fahrenheit)

# Tabla
table = cbind(Fahrenheit = fahrenheit, Celsius = celsius)

# Print
print(table, col.names = c("Fahrenheit", "Celsius"))
##       Fahrenheit    Celsius
##  [1,]          0 -17.777778
##  [2,]         10 -12.222222
##  [3,]         20  -6.666667
##  [4,]         30  -1.111111
##  [5,]         40   4.444444
##  [6,]         50  10.000000
##  [7,]         60  15.555556
##  [8,]         70  21.111111
##  [9,]         80  26.666667
## [10,]         90  32.222222
## [11,]        100  37.777778

Matrix con booleans

El código utiliza una matriz booleana para representar la asistencia de varios estudiantes a lo largo de la semana. Cada fila de la matriz representa a un estudiante y cada columna representa un día de la semana. Si un valor en la matriz es “TRUE”, significa que el estudiante asistió a la clase ese día y si es “FALSE”, significa que no asistió.

La función “print_asistencia_porcentaje” itera sobre cada fila de la matriz, y para cada estudiante, cuenta la cantidad de días en que asistió a la clase y calcula el porcentaje de días de asistencia en relación al número total de días. Finalmente, imprime el porcentaje de asistencia para cada estudiante.

En resumen, el código deduce la asistencia de un estudiante a lo largo de la semana contando los valores “TRUE” en la fila correspondiente a ese estudiante en la matriz y calculando el porcentaje de asistencia en relación al número total de días de la semana.

# Imprime la asistencia (boolean) de los alumnos usando una matriz
estudiantes = c("Juan", "Pedro", "Diego", "Lucia", "Pia")

dias = c("Lun", "Mar", "Mie", "Jue", "Vie")

asistencias = matrix(c(TRUE, FALSE, TRUE, TRUE, TRUE,
                        TRUE, TRUE, FALSE, TRUE, FALSE,
                        FALSE, TRUE, FALSE, TRUE, TRUE,
                        TRUE, TRUE, FALSE, TRUE, TRUE,
                        TRUE, TRUE, TRUE, TRUE, FALSE),
                      nrow = 5, ncol = 5, byrow = TRUE,
                      dimnames = list(estudiantes, dias))

print(asistencias)
##         Lun   Mar   Mie  Jue   Vie
## Juan   TRUE FALSE  TRUE TRUE  TRUE
## Pedro  TRUE  TRUE FALSE TRUE FALSE
## Diego FALSE  TRUE FALSE TRUE  TRUE
## Lucia  TRUE  TRUE FALSE TRUE  TRUE
## Pia    TRUE  TRUE  TRUE TRUE FALSE
print_asistencia_porcentaje = function(asistencias) {
  num_dias = ncol(asistencias)
  for (i in 1:nrow(asistencias)) {
    estudiante = rownames(asistencias)[i]
    asistencias_estudiante = asistencias[i, ]
    porcentaje_asistencia = sum(asistencias_estudiante) / num_dias * 100 # true = 1
    cat(sprintf("%s: %.2f%%\n", estudiante, porcentaje_asistencia))
  }
}
print_asistencia_porcentaje(asistencias)
## Juan: 80.00%
## Pedro: 60.00%
## Diego: 60.00%
## Lucia: 80.00%
## Pia: 80.00%

Factor

En este código se crea un vector llamado “colores” que contiene 10 elementos, cada uno de los cuales es un color. Luego, se utiliza la función factor() para convertir el vector de caracteres en un factor. Los factores son un tipo especial de objeto en R que se utilizan para almacenar datos categóricos. En este caso, los colores son un ejemplo de datos categóricos, ya que no pueden ser ordenados o cuantificados de manera numérica.

# Vector con colores
colores = c(
  "Azul",
  "Verde",
  "Rojo",
  "Rojo",
  "Verde",
  "Azul",
  "Verde",
  "Amarillo",
  "Amarillo",
  "Rojo"
)

# Convertir vector en un factor
fact_colores = factor(colores)

# Print Factor
print(fact_colores)
##  [1] Azul     Verde    Rojo     Rojo     Verde    Azul     Verde    Amarillo
##  [9] Amarillo Rojo    
## Levels: Amarillo Azul Rojo Verde
print(table(fact_colores))
## fact_colores
## Amarillo     Azul     Rojo    Verde 
##        2        2        3        3

Desafío 3

Implementación del juego “Piedra, papel o tijeras”. La función fn_juego comienza generando una opción aleatoria (roca, papel o tijeras) para la computadora mediante el uso de la función sample. Luego, solicita al usuario que ingrese su elección. Después de verificar que la elección del usuario es válida, el código determina si el usuario ganó, perdió o empató con la computadora. Finalmente, se imprime el resultado del juego y se devuelve en la variable resultado.

fn_juego  = function() {
  # Se utiliza sample para seleccionar de forma aleatoria una opcion para el computador
  # (roca, papel, tijeras)
  computadora = sample(c("roca", "papel", "tijeras"), size = 1)
  
  # Pide al usuario que ingrese opcion
  usuario = readline("Ingresa (roca, papel, tijeras): ")
  
  # convierte el string a lowercase y elimina los espacios en blanco
  usuario = tolower(trimws(usuario))
  
  # Check si el string ingresado por el usuario es correcto
  if (usuario %in% c("roca", "papel", "tijeras")) {
    # Duelo
    if (usuario == computadora) {
      resultado = "Empate"
    } else if (usuario == "roca" && computadora == "tijeras") {
      resultado = "Ganaste!"
    } else if (usuario == "papel" && computadora == "roca") {
      resultado = "Ganaste!"
    } else if (usuario == "tijeras" && computadora == "papel") {
      resultado = "Ganaste!"
    } else {
      resultado = "Perdiste!"
    }
  } else {
    resultado = "Debes ingresar roca, papel o tijeras."
  }
  
  # Print el resultadoado
  cat("Usuario:", usuario, "\n")
  cat("Computadora:", computadora, "\n")
  cat(resultado, "\n")
  return(resultado)
}

fn_juego()
## Ingresa (roca, papel, tijeras): 
## Usuario:  
## Computadora: papel 
## Debes ingresar roca, papel o tijeras.
## [1] "Debes ingresar roca, papel o tijeras."

Diferencia entre & y &&

La diferencia, al menos en el caso de vectores, radica en que el operador & permite evaluar cada elemento de los vectores y retornar un resultado vectorizado, mientras que el operador && evalúa solamente el primer elemento de cada vector y retorna un resultado no vectorizado. En otras palabras, si el primer resultado con && es TRUE o FALSE, el resto de los elementos del vector no son evaluados y se asume que son el resultado anteriormente obtenido, mientras que & evalúa todos los elementos y devuelve el resultado de forma vectorizada.

&

(c(-1, 0, 1) >= 0) & (c(-1, 0, 1) <= 0)
## [1] FALSE  TRUE FALSE
c(TRUE, FALSE, FALSE) & c(TRUE, TRUE, TRUE)
## [1]  TRUE FALSE FALSE

&&

#c(TRUE, TRUE) && c(FALSE, TRUE)
(c(-1, 0, 1) >= 0) && (c(-1, 0, 1) <= 0)
## [1] FALSE
c(TRUE, FALSE, FALSE) && c(TRUE, TRUE, TRUE)
## [1] TRUE

Desafío 4

2) Describa el conjunto de datos y explique para que fue o podría ser utilizado. Puede usar la función help(‘nombre_del_dataset’). ¿Cuál es la fuente de los datos?

Descripción:

El conjunto de datos “Locations of Earthquakes off Fiji” proporciona información sobre la ubicación de 1000 eventos sísmicos con magnitud de MB>4.0 que ocurrieron en un cubo cerca de Fiji desde 1964. Los datos incluyen la latitud y longitud del evento, su profundidad en kilómetros, la magnitud de Richter y el número de estaciones que reportaron el evento. El conjunto de datos es una muestra de un conjunto de datos más grande con 5000 observaciones.

Utilidad:

El conjunto de datos “Locations of Earthquakes off Fiji” es útil desde una perspectiva estadística y probabilística para prever la probabilidad de terremotos futuros en la región, así como para estudiar la distribución espacial de los terremotos. Los datos se pueden utilizar para estimar la frecuencia de terremotos y construir modelos probabilísticos de la ocurrencia de terremotos en la zona cercana a Fiji. Además, la distribución espacial de los terremotos puede ser útil para comprender la tectónica de placas y la geología de la región. En general, el conjunto de datos es una valiosa fuente de información para el análisis estadístico y modelización de la actividad sísmica en la región cercana a Fiji.

Fuente de los datos:

Los conjuntos de datos del proyecto Harvard PRIM-H fueron obtenidos por el propio proyecto de Harvard PRIM-H. A su vez, lo obtuvieron del Dr. John Woodhouse, del Departamento de Geofísica de la Universidad de Harvard.

3) Describa cada variable, indique a qué tipo de variable corresponde, indique qué valores puede tomar y su unidad de medida.

  • “lat”: Representa la latitud de la ubicación del evento sísmico. Es una variable numérica y puede tomar cualquier valor numérico. La unidad de medida es grados decimales (°).
  • “long”: Representa la longitud de la ubicación del evento sísmico. Es una variable numérica y puede tomar cualquier valor numérico. La unidad de medida es grados decimales (°).
  • “depth”: Representa la profundidad del evento sísmico. Es una variable numérica y puede tomar cualquier valor numérico. La unidad de medida es kilómetros (km).
  • “mag”: Representa la magnitud del evento sísmico en la escala de Richter. Es una variable numérica y puede tomar cualquier valor numérico. La escala de Richter es adimensional.
  • “stations”: Representa el número de estaciones que informaron sobre el evento sísmico. Es una variable numérica y puede tomar cualquier valor numérico. La unidad de medida es unidades sin dimensiones.

4) Ejecute la función summary(“conjunto_de_datos”). ¿Qué puede observar?

En este tipo de datos solo Length Class Mode

5) Ejecute la función plot(“conjunto_de_datos”). ¿Qué puede observar?

En el gráfico generado con Plotly, se pueden observar los terremotos registrados en las costas de Fiji. Los puntos en el gráfico representan la ubicación geográfica del epicentro del terremoto. La escala de color a la derecha muestra la magnitud del terremoto en la escala de Richter. Los terremotos de mayor magnitud tienen un color más oscuro, mientras que los de menor magnitud tienen un color más claro.

Además, es posible hacer zoom en el mapa para ver con más detalle la ubicación de los terremotos. Al pasar el cursor sobre cada punto, se muestra información detallada sobre la magnitud y la profundidad del terremoto.

En general, este gráfico permite visualizar de manera clara y concisa la distribución geográfica y la magnitud de los terremotos en la región de Fiji, lo que resulta de gran utilidad para comprender la actividad sísmica en esta zona del planeta.

library(plotly)
data('quakes')

# Nombres variables (lat, long, depth, mag, stations)
nombres = c("Latitud", "Longitud", "Profundidad", "Magnitud", "Estaciones")

# Nombres de columnas de datos
colnames(quakes) = nombres

# Plotly, puntos interactivos
fig = plot_ly(quakes, x = ~Longitud, y = ~Latitud, type = "scatter", mode = "markers", 
               marker = list(color = ~Profundidad, size = ~Magnitud, sizemode = "diameter", 
                             sizemin = 1, sizemax = 10, opacity = 0.8,
                             symbol = 'circle'),
               text = paste("Magnitud:", quakes$Magnitud, "<br>Profundidad:", quakes$Profundidad, "<br>Estaciones:", quakes$Estaciones),
               hovertemplate = "%{text}<br>Latitud: %{y}<br>Longitud: %{x}<extra></extra>",
               colorbar = list(title = "Profundidad (km)"))
fig = fig %>% layout(title = "Ubicaciones de Terremotos frente a Fiji",
                      xaxis = list(title = "Longitud"),
                      yaxis = list(title = "Latitud"),
                      showlegend = FALSE,
                      hovermode = "x")
fig

Referencias