Introduccion a RStudio

RStudio es un entorno de desarrollo integrado para el lenguaje de programación R, dedicado a la computación estadística y gráficos. Incluye una consola, editor de sintaxis que apoya la ejecución de código, así como herramientas para el trazado, la depuración y la gestión del espacio de trabajo.

Primero tenemos que comprender como crear variables

a<- 5
a
## [1] 5
A<- 6
A
## [1] 6
a<- 7
a
## [1] 7

Tipos de Datos

Un tipo de datos es la propiedad de un valor que determina su dominio (qué valores puede tomar), qué operaciones se le pueden aplicar y cómo es representado internamente por el computador.

Todos los valores que aparecen en un programa tienen un tipo.

A continuación revisaremos los tipos de datos elementales de Rstudio Además de éstos, existen muchos otros, y más adelante aprenderemos a crear nuestros propios tipos de datos

  • Integer: Números enteros: 56L
  • Numeric: Números con decimales: 12.3874
  • Character: Cadenas de texto (“Esto es un texto”)
  • Boolean: Valores lógicos: TRUE(T), FALSE(F)

Integer

El tipo int (del inglés integer, que significa «entero») permite representar números enteros.

Los valores que puede tomar un int son todos los números enteros: … -3, -2, -1, 0, 1, 2, 3, …

Los números enteros literales se escriben con un signo opcional seguido por una secuencia de dígitos:

a<- 5L
a
## [1] 5
a+1
## [1] 6
a*2
## [1] 10
a-3
## [1] 2
a/2
## [1] 2.5

class() class(objeto) = Regresa el tipo de dato del objeto

class(a)
## [1] "integer"

Numeric

El tipo numeric permite representar números reales.

Hay que tener mucho cuidado, porque los números reales no se pueden representar de manera exacta en un computador. Por ejemplo, el número decimal 0.7 es representado internamente por el computador mediante la aproximación 0.69999999999999996. Todas las operaciones entre valores numeric son aproximaciones. Esto puede conducir a resultados algo sorpresivos:

b<- 2.5654678
b
## [1] 2.565468
a+b
## [1] 7.565468
a*b
## [1] 12.82734
a-b
## [1] 2.434532
a/b
## [1] 1.948962
class(b)
## [1] "numeric"

Character

c<- "Hola Mundo"
d<- "Hola"
e<- "Mundo"

paste() paste(cadena_1, cadena_2, …, cadena_n, sep= {” “,”-“,”/“,”“,”p”…..}): Concatena texto el parámetro (sep nos indica el separador que colocará entre las cadenas de texto*)

paste(d, e, sep=" ")
## [1] "Hola Mundo"
paste(d, e, sep="-")
## [1] "Hola-Mundo"
paste(d, e, sep="+")
## [1] "Hola+Mundo"
f<- paste(d, e, sep=" ")

gsub() gsub(“texto_original”, “texto_nuevo”, cadena): Sirve para sustituir un caracter/subcadena dentro de una cadena de texto

gsub("o", "e", f)
## [1] "Hela Munde"
class(c)
## [1] "character"

Boolean

g<- TRUE    # Valor 1
h<- FALSE   # Valor 0
g
## [1] TRUE
h
## [1] FALSE
g*a
## [1] 5
h*a
## [1] 0
i<- (5==5)   # Comparativa de igualdad
j<- (5!=34)  # Comparativa de desigualdad
k<- (4>2)    # Mayor que (>=)  SOLO PARA NÚMEROS
l<- (4<=2)    # Mayor que (<)  SOLO PARA NÚMEROS
m<- ("Hola" == d) # Comparativa de igualdad

Objetos en R

Los objetos en R son estructuras diseñadas para contener información y trabajarla de una manera mas sencilla haciendo uso de sus propiedades. Cada estructura tiene atributos por medio de los cuales podemos acceder a su contenido

  • Simples :
    • vectores
    • matrices
  • Compuestos:
    • Listas
    • dataframe

Vectores

Cadena plana (una dimensión) de un tipo único de datos Se declara con el comando c() y los elementos separados por comas

Vector numérico

a<- c(2, 5, 7, 8, 10, 2)  # 
a
## [1]  2  5  7  8 10  2
class(a)
## [1] "numeric"

Tipos de dato por complejidad

1.- Boolean
2.- Integer
3.- Numeric
4.- Character

Cuando se intenta colocar tipos de datos diferentes en un vector, este toma el tipo de dato mas complejo y tranforma todos los elementos en este tipo

b<- c(4, 2, TRUE, "R")    
class(b)                   
## [1] "character"
b   
## [1] "4"    "2"    "TRUE" "R"
c<- c(2L, TRUE, 7L, FALSE)
class(c)
## [1] "integer"

Atributos de los vectores

a
## [1]  2  5  7  8 10  2
length(a)  # Número de elementos que contiene
## [1] 6
class(a)   # Tipo de datos que contiene
## [1] "numeric"

Acceso a los elementos de un vector

Elementos c(2 5 7 8 10 2) Posición 1 2 3 4 5 6

La selecció de elementos se hace con “[]”

a[5]  
## [1] 10
class(a[5]) # Esto es un número y puedo operarlo
## [1] "numeric"
a[5]*3
## [1] 30
a[ c(2, 4, 5) ]  # Es un vector
## [1]  5  8 10
a[2:4]
## [1] 5 7 8

Podemos aplicar funciones a los vectores y operarlos Esto opera los vectores elemento por elemento

a*3
## [1]  6 15 21 24 30  6
exp(a)  # Función exponencial
## [1]     7.389056   148.413159  1096.633158  2980.957987 22026.465795
## [6]     7.389056

Para cambiar valores de un vector usaremos la siguiente operación

a[1]<- 50
a[1]
## [1] 50
a
## [1] 50  5  7  8 10  2

Matrices

Estructura de dos dimensiones la cual contiene datos del mismo tipo

matrix(c(1,2,3,4,5,6,7,8),  # Vector con los datos que quiero para la matríz
       nrow = 4,            # número de filas de la matríz
       ncol = 2)            # número de columnas de la matríz
##      [,1] [,2]
## [1,]    1    5
## [2,]    2    6
## [3,]    3    7
## [4,]    4    8
mat<- matrix(c(1,2,3,4,5,6,7,8), nrow = 4, ncol = 2)

Atributos de las matrices

length(mat)   # Número de elementos de la matríz
## [1] 8
dim(mat)      # Vector con c(filas, columnas)
## [1] 4 2
dim(mat)[1]   # Filas de la matríz
## [1] 4
dim(mat)[2]   # Columnas de la matríz
## [1] 2
class(mat)
## [1] "matrix" "array"

Para extraer elementos de la matríz usaremos “[]”

mat[3,1]   # Extraer 1 elemento
## [1] 3
mat[1,]    # Extraer filas, regresa un vector con los elementos de la fila
## [1] 1 5
mat[,2]    # Extraer columnas, regresa un vector con los elementos de la columna
## [1] 5 6 7 8

Cambiar un elemento de una matríz

mat
##      [,1] [,2]
## [1,]    1    5
## [2,]    2    6
## [3,]    3    7
## [4,]    4    8
mat[2,2]<- 100
mat
##      [,1] [,2]
## [1,]    1    5
## [2,]    2  100
## [3,]    3    7
## [4,]    4    8

Lista

e1<- "c1"  # Var caracter
e2<- 20    # Var número
e3<- TRUE  # Var booleana

Para crear una lista usaremos el comando list()

l<- list(e1, e2, e3)
l                     # Lista de variables
## [[1]]
## [1] "c1"
## 
## [[2]]
## [1] 20
## 
## [[3]]
## [1] TRUE
e1<- c("c1", "c2", "c3", "c4")
e2<- c(1,2,3,4,5)
e3<- c(T,F)

l<- list(e1, e2, e3)
l                     # Lista de vectores
## [[1]]
## [1] "c1" "c2" "c3" "c4"
## 
## [[2]]
## [1] 1 2 3 4 5
## 
## [[3]]
## [1]  TRUE FALSE

####Atributos de una lista

length(l)      # Lista que contiene 3 vectores
## [1] 3
class(l)
## [1] "list"

Podemos asignar nombre a cada elemento de la lista

l<- list("Elemento1"= e1, "Elemento3"= e2, "Elemento3"= e3)  
l
## $Elemento1
## [1] "c1" "c2" "c3" "c4"
## 
## $Elemento3
## [1] 1 2 3 4 5
## 
## $Elemento3
## [1]  TRUE FALSE

####Acceso a los elementos de listas

l[1]                # Primer elemento de la lista
## $Elemento1
## [1] "c1" "c2" "c3" "c4"
class(l[1])         # Es de tipo lista, no es el vector que ingresé de origen
## [1] "list"
l[[1]]              # Primer elemento de la lista
## [1] "c1" "c2" "c3" "c4"
class(  l[[1]]  )   # Es el vector que ingresamos
## [1] "character"
l$Elemento1         # Es el vector que ingresamos
## [1] "c1" "c2" "c3" "c4"

l[[1]] \~ l\$Elemento1

Data Frame

Es similar a una matríz pero ouede contener diferentes tipos de datos

edad<- c(23, 24, 28, 24, 22, 23, 27)
sexo<- c("M", "M", "H", "H", "H", "H", "M")
calificacion<- c(8, 8, 9, 9 ,9 ,10, 10)

data.frame() Para crear 1 dataframe usaremops el comando data.frame(vec_1, vec_2, vec_3, ….., vec_n) donde cada vec_i representa 1 columna

df<- data.frame(edad, sexo, calificacion)
df

Atributos del dataframe

str(df)     # Estructura del dataframe
## 'data.frame':    7 obs. of  3 variables:
##  $ edad        : num  23 24 28 24 22 23 27
##  $ sexo        : chr  "M" "M" "H" "H" ...
##  $ calificacion: num  8 8 9 9 9 10 10
dim(df)     # c(#filas, #columnas)
## [1] 7 3
dim(df)[1]  # #Filas
## [1] 7
dim(df)[2]  # #columnas
## [1] 3
class(df)
## [1] "data.frame"
colnames(df)  # Vector con los nombres de columnas
## [1] "edad"         "sexo"         "calificacion"

Renombrar nombres de columna

colnames(df)<- c("EDAD", "GENERO", "CALIFICACION_CURSO")

colnames(df)
## [1] "EDAD"               "GENERO"             "CALIFICACION_CURSO"
df
rownames(df)  # Vector con los nombres de las filas (en nuestro ejemplo son números de fila) 
## [1] "1" "2" "3" "4" "5" "6" "7"

Acceso a dataframes

df[4, "CALIFICACION_CURSO"]   # Seleeción de 1 elemento del dataframe
## [1] 9
df[4, 3]                      # Seleeción de 1 elemento del dataframe
## [1] 9
df[3, ]                       # Selección de 1 fila
df[, "EDAD"]                  # Selección de 1 columna
## [1] 23 24 28 24 22 23 27
df[, 1]                       # Selección de 1 columna
## [1] 23 24 28 24 22 23 27
df$CALIFICACION_CURSO         # Selección de 1 columna
## [1]  8  8  9  9  9 10 10
df[1:5, 1:2]                  # Selección de múltiples filas y columnas
df$GENERO[c(1, 3, 7)]         # Selección de múltiples filas y columnas
## [1] "M" "H" "M"

Estructuras de Control

IF-ELSE

El comando “if-else” sirve para evaluar condiciones lógicas y dependiendo del resultado generar ciertas acciones

var<- 8
if( var<10 ){
  print(" La variable var es menor a 10")
  var<- var+1
  vect<- c(1,2,3,4,5)
}
## [1] " La variable var es menor a 10"
var
## [1] 9
vect
## [1] 1 2 3 4 5
var<- 9
if( var<10 ){
  print("La variable es menor a 10")
  var<- var-1
}else{
  print("La variable es mayor a 10")
  var<- var+1
}
## [1] "La variable es menor a 10"
var
## [1] 8

readline() El comando readline - Input sirve para guardar información del usuario dentro de variables

nombre<- readline(prompt = "Hola, cuál es tu nombre ?")
## Hola, cuál es tu nombre ?
edad<- readline(prompt = "Hola, cuál es tu edad ?")
## Hola, cuál es tu edad ?

Ejercicio 1

Genera un programa que pida la edad del usuario y si es mayor de edad imprima un mensaje indicando que puede entrar al programa y en caso contrario que imprima un mensaje diciendo que no puede entrar al programa

Para cambiar un tipo de dato a otro podemos usar la función as.tipo

  • as.character(): Convertir variable a caracter
  • as.integer(): Convertir variable a entero
  • as.numeric(): Convertir variable a número con punto decimal
  • as.logical(): Convertir variable a booleano

edad<- as.numeric(readline(prompt = "Hola, cuál es tu edad ?"))

class(edad)

if( edad>=18 ){

print(" Puedes entrar al programa ")

}else{

print(" No pedes entrar al programa ")

}

Ejercicio 2

Genera un programa que pida la edad del usuario y genere lo siguiente:

  1. Si tiene menos de 15 años indicar que paga boleto de niño

  2. Si tiene entre 15 años y 64 indicar que paga boleto de adulto

  3. Si tiene 65 o mas indicar que paga boleto de adulto mayor

edad<- as.numeric(readline(prompt = "Hola, cuál es tu edad ?"))

if(edad<15){

print("Pagas boleto de niño")

}else{

if( edad<65 ){

print("Pagas boleto de adulto")

}else{

print("Pagas boleto de adulto mayor")

}

}

Para multiples condiciones usaremos los operadores

  • & = and

  • |= or

edad <- 12
if(edad>10 & edad<15){
  print("Pagas boleto de niño")}
## [1] "Pagas boleto de niño"

versión corta

Ifelse()

Ejemplo: ifelse(CONDICIÓN_LÓGICA, acción_si_TRUE, acción_si_FALSE)

ifelse(edad<18, print("Eres menor de edad"), print("Eres mayor de edad"))
## [1] "Eres menor de edad"
## [1] "Eres menor de edad"

FOR

Este ciclo nos sirve para ejecutar un conjunto de sentencias una cantidad finita y conocida de veces, es muy util para tareas repetitivas

Código que imprime los números del 1 al 10

for(miVariable in 1:10){
  print(miVariable)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
numeros= c(1,3,5,7,9,11)
for(x in numeros){
  print(x)
}
## [1] 1
## [1] 3
## [1] 5
## [1] 7
## [1] 9
## [1] 11
vector<- c("Sebastian", "Abril", "Alejandra", "Alejandro", "Brenda")
for(x in vector){
  print( paste("Hola", x, sep= " ") )
}
## [1] "Hola Sebastian"
## [1] "Hola Abril"
## [1] "Hola Alejandra"
## [1] "Hola Alejandro"
## [1] "Hola Brenda"
sum= 0
for(x in c(1,3,5,7,9,11)){
  if(x<10){
    sum= sum + x
  }
}
sum
## [1] 25

Ejercicio 1

Genera un ciclo que corra del 1 al 20 y que imprima el número solo si es par

Función modulo num%%n

4%%2
## [1] 0
5%%2
## [1] 1
for(x in 1:20){
  if(x%%2==0){
    print(x)
  }
}
## [1] 2
## [1] 4
## [1] 6
## [1] 8
## [1] 10
## [1] 12
## [1] 14
## [1] 16
## [1] 18
## [1] 20

While

Este ciclo no tiene un final “fijo” a diferencia del ciclo for, sin embargo el término se controla con una condición lógica y mientras no se cumpla se seguira ejecutando

n<- 1
while( n<10 ){
  print(n)
  n= n+1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9

Ejercicio 1

Genera un ciclo que imprima la sucesiónde Fibonacci dado un número fijo

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ……,

limite= 100

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

limite= 40

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

limite= 500
actual<- 1
anterior<- 0

fibo<- c(0)
while( actual<=limite ){
  fibo<- c(fibo, actual)
  aux<- anterior
  anterior<- actual
  actual<- aux + anterior
}
fibo
##  [1]   0   1   1   2   3   5   8  13  21  34  55  89 144 233 377

Anterior actual aux 0 1
1 1 0 1 2 1 2 3 1 3 5 2

n<- 0 
m<- 1
limite<- 145
while(n<limite){
  print(n)
  n<- n+m
  print(m)
  m<- n+m
}
## [1] 0
## [1] 1
## [1] 1
## [1] 2
## [1] 3
## [1] 5
## [1] 8
## [1] 13
## [1] 21
## [1] 34
## [1] 55
## [1] 89
## [1] 144
## [1] 233