Sabemos que toda la acción en R es a través de comandos o instrucciones.
La consola Permite hacer pruebas para obtener información específica momentanea.
En la consola encontramos >(prompt)
Sirve como calculadora, los espacios no son necesarios, perso se recomiendan para mejorar la legibilidad. Se puede usar operadores aritméticos.
Calcular la raíz cuadrada de 25
sqrt(25)
## [1] 5
Hay que tener en cuenta que en la consola se obtiene el resultado, pero este no queda grabado como objeto, si queremos almacenar es necesario hacerlo mediante los signos ( <-) o también (=)
a <- (2 + sqrt(5^2 +11 ))
a
## [1] 8
Ahora se crea un objeto llamado a que graba el resultado de esta operación. Este puede utilizarse en ambos sentidos.
5 + 20 -> b
b
## [1] 25
Todas las asignaciones o resultado de una respuesta pueden ser visualizadas en Environment.
Como los objetos ya están en la memoria de trabajo se puede hacer operaciones con los nombres
c <- a + b
c
## [1] 33
Hay que tener en cuenta que en R hay dos grupos de objetos: Vectores y Funciones
Todas las estructuras que se almacenan son vectores. No existen escalares, todos son vectores.
Por ejemplo al realizar la siguiente operación
5*10
## [1] 50
En la consola obtenemos el escalar 50 pero este es un vector de longitud. El número entre el corchete indica el indice correspondiente a ese primer elemento.
Para crear un vector
Utilizamos la función c
v <- c(9, 5, 3.14)
v
## [1] 9.00 5.00 3.14
Si queremos acceder al segundo de los elementos de v
v[2]
## [1] 5
En conclusión sabemos que existen dos tipos de vectores.
Vectores atómicos Permiten almacenar un mismo tipo de elementos.
d <- 5-10
d
## [1] -5
Vectores no atómicos Pueden almacenar elementos variados y son mucho más versátiles.
e <- c("Luis", "Hombre", "24")
e
## [1] "Luis" "Hombre" "24"
Las acciones que ejecuta R es una función, si los vectores permiten almacenar datos, las funciones operan esos datos.
Recordemos los elementos de v
v
## [1] 9.00 5.00 3.14
Ahora calculamos la media
mean(v)
## [1] 5.713333
Si queremos calcular la raíz de -100
f <- -100
sqrt(f)
## Warning in sqrt(f): NaNs produced
## [1] NaN
Vemos que nos devuelve un NaN que es not a number o indeterminación.
Podemos construir una función para que convierta la entrada compleja si algún valor es negativo.
raiz <- function(entrada){
if(any(entrada <0)){
entrada <- as.complex(entrada)
}
return(sqrt(entrada))
}
raiz(f)
## [1] 0+10i
La función ls() permite mostrar los elementos.
Ejercicio 1
Queremos crear el vector w, que contiene los valores 1, -3, 7 y 12. Luego aplicaremos dos funciones al vector: una que dé un resultado único, de tipo resumen (como la media) y otra que dé un resultado elemento a elemento (de igual longitud). Después, comprueba los objetos presentes en el espacio de trabajo.
w <- c(1, -3, 7, 12)
mean(w)
## [1] 4.25
abs(w)
## [1] 1 3 7 12
ls()
## [1] "a" "b" "c" "d" "e" "f" "raiz" "v" "w"
Existen 5 tipos de vectores atómicos:
i <- c(5L, 6L) #integrer
d <- c(3, 6, 9) #double
l <- c(TRUE, F) #logical
c <- c("L", "Nina") #character
x <- c(1+2i, 4i) #complex
Los tipso serían los siguientes:
typeof(i)
## [1] "integer"
typeof(d)
## [1] "double"
typeof(l)
## [1] "logical"
typeof(c)
## [1] "character"
typeof(x)
## [1] "complex"
Enteros/Integrer Almacenan valores numéricos únicamente enteros. El sufijo L es para indicar que son valores numéricos de tipo entero.
Reales/Double Almacenan valores numéricos reales.
Lógicos/Logical Solo pueden almacenar valores de verdadero o falso, se puede usar (TRUE, FALSE) o (T, F).
Alfanumñerico/Character Cualquier tipo de cadena de caracteres entre comillas se considera tipo alfanumérico.
Complejos/Complex Suma de una parte real y otra imaginaria mediante el sufijo i.
También se puede crear secuencias
g = (20:30)
g
## [1] 20 21 22 23 24 25 26 27 28 29 30
Para mostrar la estructura de los objetos de utiliza la siguiente función
str(g)
## int [1:11] 20 21 22 23 24 25 26 27 28 29 ...
Hay dos opciones para almacenar información heterogénea: 1. Las listas 2. Los data frames
Listas: Contenedores universales que almacenan cualquier vertctor atómico incluso data frames.
Data frames: Son listas diseñadas para almacenar bases de daros en formatos filas (casos) por columnas (variables)
Crearemos una lista con tres vectores de diferentes tipos
lista <- list(A =7,
B = c("ciencia", "datos"),
C= c(T,F,T))
lista
## $A
## [1] 7
##
## $B
## [1] "ciencia" "datos"
##
## $C
## [1] TRUE FALSE TRUE
Para consultar el tipo y la estructura
typeof(lista$A)
## [1] "double"
typeof(lista$B)
## [1] "character"
typeof(lista$C)
## [1] "logical"
str(lista$A)
## num 7
str(lista$B)
## chr [1:2] "ciencia" "datos"
str(lista$C)
## logi [1:3] TRUE FALSE TRUE
Data frame Es un requisito que los vectores componentes tengan la misma longitud, algo razonable en cualquier base de datos.
df <- data.frame(Id = c(1, 2, 3, 4, 5),
Grupo= c("Ecuador", "Colombia", "Ecuador", "Colombia", "Ecuador"),
Edad = c(22, 23, 25, 40, 50))
df
## Id Grupo Edad
## 1 1 Ecuador 22
## 2 2 Colombia 23
## 3 3 Ecuador 25
## 4 4 Colombia 40
## 5 5 Ecuador 50
Para poder acceder a su contenido existen varias formas una es utilizar el operador $
df$Grupo
## [1] "Ecuador" "Colombia" "Ecuador" "Colombia" "Ecuador"
Otra forma es
df[2, ]
## Id Grupo Edad
## 2 2 Colombia 23
df[ , 2]
## [1] "Ecuador" "Colombia" "Ecuador" "Colombia" "Ecuador"
Ejercicio 2
Utilizando los vectores construidos en el ejercicio anterior, crea una lista con tres componentes. Contruye también un data frame con los dos vectores que no usaste para la lista. Probablemente tendrás que hacer algún ajuste respecto a la longitud de los componentes. Prueba a crear otras listas y data frames con otras combinaciones de esos mismos componentes.
Crear la lista con los vectores anteriores.
l1 <- list(df$Id, df$Grupo, df$Edad)
l1
## [[1]]
## [1] 1 2 3 4 5
##
## [[2]]
## [1] "Ecuador" "Colombia" "Ecuador" "Colombia" "Ecuador"
##
## [[3]]
## [1] 22 23 25 40 50
typeof(l1)
## [1] "list"
str(l1)
## List of 3
## $ : num [1:5] 1 2 3 4 5
## $ : chr [1:5] "Ecuador" "Colombia" "Ecuador" "Colombia" ...
## $ : num [1:5] 22 23 25 40 50
Crear un data frame con otras conbinaciones
c <- c("L", "Nina", "Titan")
df2 <- data.frame(d, c)
df2
## d c
## 1 3 L
## 2 6 Nina
## 3 9 Titan
Ejercicio 3
Obtén el vector z, resultado de tipificar el vector o, usando procedimientos vectoriales.
o <-1:5
media <- sum(o)/length(o)
varianza <- sum((o-media)^2)/length(o)-1
z <- (o-media)/sqrt(varianza)
z
## [1] -2 -1 0 1 2
Ejecutar un programa
source("hola.R")
## [1] "¡Hola, Mundo!"
Ejercicio 3
Vamos a crear un pequeño programa y luego lo ejecutaremos. Para ello:
Abre un archivo nuevo (R Script) en RStudio.
Escribe un comentario (con #) al inicio indicando el nombre del programa (programa_1.R) y en la siguiente línea, su autor/a.
A continuación crea un vector, v, de longitud 7 con números PARTE I: Primeros pasos 39 reales en el intervalo [0, 10].
Calcula la media del vector.
Muéstrala por pantalla.
Guarda el archivo con el nombre indicado anteriormente y ciérralo.
Ejecuta el programa.
source("programa_1.R")
## [1] "La media es:"
## [1] 4.642857
m <- c(1, 2, 3)
n <- c("María", "Juan", "Luis")
p <- c(T, T, F)
r <- data.frame(m, n, p)
r
## m n p
## 1 1 María TRUE
## 2 2 Juan TRUE
## 3 3 Luis FALSE
save(r, file = "datps.RData")
load("datps.RData")