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
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
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"
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"
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"
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 igualdadLos 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
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"
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"
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"
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
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)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
e1<- "c1" # Var caracter
e2<- 20 # Var número
e3<- TRUE # Var booleanaPara 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
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)
dfstr(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"
colnames(df)<- c("EDAD", "GENERO", "CALIFICACION_CURSO")
colnames(df)## [1] "EDAD" "GENERO" "CALIFICACION_CURSO"
dfrownames(df) # Vector con los nombres de las filas (en nuestro ejemplo son números de fila) ## [1] "1" "2" "3" "4" "5" "6" "7"
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 filadf[, "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 columnasdf$GENERO[c(1, 3, 7)] # Selección de múltiples filas y columnas## [1] "M" "H" "M"
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 ?
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 caracteras.integer(): Convertir variable a enteroas.numeric(): Convertir variable a número con punto
decimalas.logical(): Convertir variable a booleanoedad<- 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 ")
}
Genera un programa que pida la edad del usuario y genere lo siguiente:
Si tiene menos de 15 años indicar que paga boleto de niño
Si tiene entre 15 años y 64 indicar que paga boleto de adulto
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"
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"
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
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
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
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= 1000, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
limite= 400, 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