🏠↩︎ De vuelta a la página principal del curso


Inicio

🚀 Objetivo de la unidad

Que el estudiante reconozca los conceptos básicos de programación, cómo programarlos en R y sus casos de uso prácticos básicos.


💡 La función print() imprime el valor que contiene el objeto ubicado entre los paréntesis.

💡 n:y genera una serie de números consecutivos entre n y y.


2.1. Instanciando objetos con vectores

Con valores lógicos

a <- TRUE

mi_variable <- c(FALSE, TRUE)


La variable b guardará un vector lógico a partir del resultado del resultado de una operación lógica.

b <- 3 == 3

print(b)
## [1] TRUE


Con cadenas de caractéres

x <- "¡Hola, mundo!"

print(x)
## [1] "¡Hola, mundo!"


y <- c("2", "3", "dos", "tres")

print(y)
## [1] "2"    "3"    "dos"  "tres"


Con enteros

s <- 42L

print(s)
## [1] 42


t <- c(2L, 3L, NA)

print(t)
## [1]  2  3 NA


Con doubles (puntos flotantes)

i <- 42

print(s)
## [1] 42


j <- c(sqrt(2) ^ 2, 1, Inf)

print(t)
## [1]  2  3 NA


Con listas

ages <- list(22, 23, 22, 21, 25)

print(ages)
## [[1]]
## [1] 22
## 
## [[2]]
## [1] 23
## 
## [[3]]
## [1] 22
## 
## [[4]]
## [1] 21
## 
## [[5]]
## [1] 25


list_of_lists <- list("arroz", "pasta", list("manzanas", "kiwis", "uvas"), c("leche", "huevo", "mantequilla", 3))

print(list_of_lists)
## [[1]]
## [1] "arroz"
## 
## [[2]]
## [1] "pasta"
## 
## [[3]]
## [[3]][[1]]
## [1] "manzanas"
## 
## [[3]][[2]]
## [1] "kiwis"
## 
## [[3]][[3]]
## [1] "uvas"
## 
## 
## [[4]]
## [1] "leche"       "huevo"       "mantequilla" "3"


2.2. Conociendo a un objeto

Las siguientes funciones permiten evaluar si un vector es de un tipo específico.

is.logical(TRUE)
## [1] TRUE


is.character("¡Hola, mundo!")
## [1] TRUE


is.integer(42L)
## [1] TRUE


is.double(2)
## [1] TRUE


is.na(NA)
## [1] TRUE


is.nan(NaN)
## [1] TRUE


is.infinite(-Inf)
## [1] TRUE


typeof es una función que nos permite saber el tipo de vector.

typeof(x)
## [1] "character"


length es una función que nos permite saber el tamaño de un vector.

length(a)
## [1] 1


Para acceder al contenido de un vector en una posición en particular. Utilice [] y la posición (el índice) de la que desea obtener el contenido.

💡 Las posiciones (índices) siempre comienzan en 1 y terminanan en n, donde n es el tamaño del vector. En la mayoría de los lenguajes de programación comienzan en 0.

print(y[1])
## [1] "2"


Puede acceder al contenido de varias posiciones utilizando un vector de índices.

print(y[1:2])
## [1] "2" "3"
print(y[c(1, 3)])
## [1] "2"   "dos"


De la misma forma, puede editar el contenido de un vector.

y[1:2] <- c(5, 6)
print(y)
## [1] "5"    "6"    "dos"  "tres"


2.3. Convirtiendo el tipo de un vector

Las siguientes funciones permiten cambiar (convertir) el tipo de un vector.

x <- "TRUE"
as.logical(x)
## [1] TRUE


x <- 1
as.character(x)
## [1] "1"


x <- "3"
as.numeric(x)
## [1] 3


2.4. Operaciones con vectores

El siguiente bloque de código multiplica dos objetos previamente instanciados guardando el valor resultante en una tercera variable.


a <- 1
factor_exp <- 300
valor_real <- a * factor_exp
print(valor_real)
## [1] 300


Instanciamos un vector.

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  


💡 Recuerde que las operaciones se ejecutan elemento por elemento.

x + 2
##  [1]  3  4  5  6  7  8  9 10 11 12


sqrt(x)
##  [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
##  [9] 3.000000 3.162278


x * c(2, 4, 8, 10, 12)
##  [1]   2   8  24  40  60  12  28  64  90 120


x * c(2, 4, 2)
## Warning in x * c(2, 4, 2): longer object length is not a multiple of shorter
## object length
##  [1]  2  8  6  8 20 12 14 32 18 20


x * c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
##  [1]   10   40   90  160  250  360  490  640  810 1000


Observe que algunas operaciones aritméticas se ejectutan de forma matricial.

sum(x)
## [1] 55


mean(x)
## [1] 5.5


median(x)
## [1] 5.5


min(x)
## [1] 1


max(x)
## [1] 10


sample(x, size = 5)
## [1] 2 4 6 7 8


🏋 Ejercicio #1

  1. Cree un vector que contenga la numeración consecutiva del 1 al 50. Suponga que estas son la edades recolectadas en un censo de población en el poblado Z.
  2. El factor de expansión de cada uno de los individuos censados en el poblado Z es de 3.5. Cree un objeto que guarde el valor de este factor de expansión.
  3. Calcule la media de edad de la población.


2.5. Condicionando

El siguiente bloque de código instancia un objeto con un vector unitario con valor 5. Después, con una instrucción if, evalúa si el valor del objeto es negativo. Si el valor del objeto es negativo, lo multiplica por -1.

num <- -5
if (num < 0) {
  print("El número es negativo.")
  
  print("Lo volveré positivo.")
  num <- num * -1 # Convierte por -1 para invertir su signo
  
  print("Ahora el número es positivo.")
}
## [1] "El número es negativo."
## [1] "Lo volveré positivo."
## [1] "Ahora el número es positivo."
print(num)
## [1] 5


El siguiente bloque de código es el mismo que el anterior, pero contiene una instrucción para aquellos casos en los que no se cumpla la condición inicial.

num <- 8
if (num < 0) {
  print("El número es negativo.")
  
  print("Lo volveré positivo.")
  num <- num * -1 # Convierte por -1 para invertir su signo
  
  print("Ahora el número es positivo.")
} else {
  print("Tu número siempre fue positivo.")
}
## [1] "Tu número siempre fue positivo."
print(num)
## [1] 8


🤸️ Ejercicio #2

  1. ¿Cuál será el valor de x después de ejecutar el siguiente código?
x <- 1
if (x == 1) {
  x <- 2
  if (x == 1) {
    x <- 3
  }
}
  1. Utilice instrucciones if y else para evaluar si la media de pobalación en el ejercicio anterior es mayor o igual que 30. En caso de que lo sea, imprima “La media de población es mayor o igual que 30.”, y en caso contrario, imprima un mensaje acorde.


2.6. Iterando

El siguiente bloque de código itera sobre todos los elementos de un vector e imprime el contenido de cada uno de estos.

mi_vector <- c(1, 2, 4, 5, 6, "siete", "ocho")
for (i in mi_vector) {
  print(i)
}
## [1] "1"
## [1] "2"
## [1] "4"
## [1] "5"
## [1] "6"
## [1] "siete"
## [1] "ocho"


🤾️ Ejercicio #3

  1. ¿Qué imprimirá el siguiente ciclo for?
mi_vector <- c(1, 2, 4, 5, 6)
for (i in mi_vector) {
  print(i + 1)
}
## [1] 2
## [1] 3
## [1] 5
## [1] 6
## [1] 7
  1. Imagine que le reportan que ha habido un error en el censo de población de Z: a todas las edades menor o igual a 30, les han sumado 1 año de edad. Utilice instrucciones for, if y else (en caso de ser necesario) para corregir el vector de edades que ya había almacenado.


2.7. Una primer función

El siguiente bloque de código equivale a una función que invierte el signo de un número.

invierte_signo <- function(x){
  x * -1
}


invierte_signo(x = -1)
## [1] 1

Al llamar una función, podemos hacer la asignación de los valores a los parámetros de forma explícita o simplemente pasar los valores.


invierte_signo(2)
## [1] -2


🏄️ Ejercicio #4

  1. Cree un función que tome una muestra aleatoria de tamaño n del vector de edades corregidas del censo de población de Z y calcule su media, dado un factor de expansión e.
    Bonus: Verifique que n sea menor al tamaño de la población total de Z.