Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2022-08-19
En la primer sesión vimos que R maneja diferentes tipos de datos, tales como
FACTOR, INTEGER, NUMERIC, LOGIC, entre otros y cada uno posee características
particulares. Estos datos se pueden organizar de diferentes maneras, las que se
denominan ESTRUCTURAS. Algunas de las estructuras que ya revisamos son:
vectores, matrices, y dataframes. De manera similar a los tipos de datos, las
estructuras poseen características y propiedades particulares.
En la sesión de hoy retomaremos el trabajo con las estrucuturas de datos,
específicamente aquellas relacionadas con las estructuras que junto con los
dataframes se emplean recuerrentemente en los análisis de morfometría geométrica.
Estos son: listas y arreglos(ver Figura 3, Sesión 1). Los arreglos son estructuras de
objetos(datos) que presentan más de dos dimensiones (Figura 1).
#imprime tu arreglo
mi_primer_arreglo
## , , 1
##
## [,1] [,2] [,3]
## [1,] 5 15 2
## [2,] 9 12 1
## [3,] 5 10 1
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 5 15 2
## [2,] 9 12 1
## [3,] 5 10 1
En este momento, esta estructura de datos podría paracer un poco extraña, pero en
realidad es la manera en la que se organizan los landmarks para cada individuo que
analizaremos en MG. Ahora nombraremos las columnas, filas y matrices para darte
una mejor idea.
#anañade nombres a todos los componentes del arreglo
column.nam <-c("coorX", "coorY", "coorZ")
row.nam <-c("landM1", "landM2", "landM3", "landM4")
matrix.nam <- c("indiv1", "indiv2")
#imprime tu arreglo
mi_segundo_arreglo
## , , indiv1
##
## coorX coorY coorZ
## landM1 1 5 9
## landM2 2 6 10
## landM3 3 7 11
## landM4 4 8 12
##
## , , indiv2
##
## coorX coorY coorZ
## landM1 1 5 9
## landM2 2 6 10
## landM3 3 7 11
## landM4 4 8 12
Analiza los nombres que hemos colocado y verás que este arreglo contiene datos de
dos invividuos, cada uno con cuatro landmarks de tres dimensiones (3D), indicado por
los valores X, Y y Z. Landmarks en 2D tendría únicamente datos para los ejes X y Y
como veremos más adelante.
Ahora, luego de haber creado un segundo arreglo, podemos explorarlo por medio de
funciones.
#ver cómo se componen el arreglo
str(mi_segundo_arreglo)
## [1] 4 3 2
Las listas
Una lista es la estructura de datos en R más compleja. Este tipo de estructura admite
múltiples dimensiones así como diferentes tipos de datos. Diferentes objetos con
diferente estructura de datos se pueden organizar en una lista.
#diferentes vectores con diferentes datos
vec_ch <- c("casa", "calle", "vecindario", "delegación")
vec_fac <- as.factor(c("chico", "mediano","grande","grande","grande"))
vec_num <- 1:100
#explora tu lista
str(mi_primer_lista)
## List of 5
## $ : chr [1:4] "casa" "calle" "vecindario" "delegación"
## $ : Factor w/ 3 levels "chico","grande",..: 1 3 2 2 2
## $ : int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## $ : int [1:5, 1:6] 1 7 13 19 25 2 8 14 20 26 ...
## $ :'data.frame': 3 obs. of 5 variables:
## ..$ Persona : chr [1:3] "Juan" "Diana" "Maggie"
## ..$ Lunes : num [1:3] 3 6 7
## ..$ Martes : num [1:3] 8 11 12
## ..$ Miercoles: num [1:3] 13 16 17
## ..$ Sexo : chr [1:3] "M" "F" "F"
#imprime tu lista
mi_primer_lista
## [[1]]
## [1] "casa" "calle" "vecindario" "delegación"
##
## [[2]]
## [1] chico mediano grande grande grande
## Levels: chico grande mediano
##
## [[3]]
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
89 90
## [91] 91 92 93 94 95 96 97 98 99 100
##
## [[4]]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 7 8 9 10 11 12
## [3,] 13 14 15 16 17 18
## [4,] 19 20 21 22 23 24
## [5,] 25 26 27 28 29 30
##
## [[5]]
## Persona Lunes Martes Miercoles Sexo
## 1 Juan 3 8 13 M
## 2 Diana 6 11 16 F
## 3 Maggie 7 12 17 F
Nuestra primer lista incluye vectores con diferentes tipos de datos, también incluye
una matriz y hasta un dataframe. Asimismo, pudimos haber incluido un arreglo.
Algunos archivos que analizaremos más adelante, principalente los pregardos en
geomorph, vienen organizados en una estructura del tipo lista. En morfometría
geométrica esto es útil porque en una lista podemos incluir los landmarks, el outline
de los especímenes, el sexo, nombre de las especies o los puntos de union entre
landmarks. Estos datos tendrán diferentes estructuras, podremos accesar a ellos
fácilmente y según sus características nos permitirán ejecutar cierto tipo de análisis.
## List of 5
## $ vector_caracter: chr [1:4] "casa" "calle" "vecindario" "delegación"
## $ vector_factor : Factor w/ 3 levels "chico","grande",..: 1 3 2 2 2
## $ vector_numerico: int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## $ matriz_dedatos : int [1:5, 1:6] 1 7 13 19 25 2 8 14 20 26 ...
## $ dataset_frame :'data.frame': 3 obs. of 5 variables:
## ..$ Persona : chr [1:3] "Juan" "Diana" "Maggie"
## ..$ Lunes : num [1:3] 3 6 7
## ..$ Martes : num [1:3] 8 11 12
## ..$ Miercoles: num [1:3] 13 16 17
## ..$ Sexo : chr [1:3] "M" "F" "F"
## [1] "data.frame"
#cuál es su estructura
str(mi_primer_lista$dataset_frame)
Según la estructura del objeto seleccionado, podrás emplear funciones para conecer
más de él o rectificar su tipo de dato si el análisis que ejecutarás así lo requiere.
## [1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4
3.9 3.5
## [19] 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2
3.1 3.2
## [37] 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2
3.1 2.3
## [55] 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5
3.2 2.8
## [73] 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3
3.0 2.5
## [91] 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0
2.5 2.9
## [109] 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6 2.2 3.2 2.8 2.8 2.7
3.3 3.2
## [127] 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1
2.7 3.2
## [145] 3.3 3.0 2.5 3.0 3.4 3.0
A este plot le hemos agregado diversos títulos, inclusive texto en cursiva, pero sigue
sin mostrarnos la relación de los punto sentre las diferentes especies. Para
complementar esto, le daremos colores a los puntos.
plot(
iris$Sepal.Width,
iris$Sepal.Length,
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
col = iris$Species, #colores de los puntos segú esta variable
main = expression('Proporciones en spp del género '*italic(Iris)*' ') #
título
)
Darle colores a los punto es útil. Si observas el gráfico puedes ver que hay un grupo
que se separa más de los otros dos, pero no sabemos quien es ese grupo. Para arreglar
eso, agregaremos etiquetas a los puntos.
plot(
iris$Sepal.Width,
iris$Sepal.Length,
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
col = iris$Species, #colores de los puntos segú esta variable
main = expression('Proporciones en spp del género '*italic(Iris)*' ') #
título
)
En Rstudio, en la sección de ayuda, explora las opciones que tienes para editar el plot.
En estos momentos lo que nos interesa es una opción llamada pch, que nos presenta
los diferenntes simbolos que pueden adquirir nuesrto plot Figura 3.
Tanto los símbolos como los colores del plot se pueden cambiar según la especie o
grupos que tengamos. Antes de hacer esto, debemos de asegurarnos que la variable
que define a las especies es del tipo numérico.
sp <- iris$Species
class(sp)
## [1] "factor"
sp <- as.numeric(sp)
#graficamos
plot(
iris$Sepal.Width,
iris$Sepal.Length,
pch = sp, #el tipo de punto del plot por sp
col = sp, #colores de los puntos según esta variable
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
main = expression('Proporciones en spp del género '*italic(Iris)*' ') #
título
)
Aunque el
gráfico anterior no se ve mal, este aún se puede mejorar modificando los colores,
agregando un cuadro con la leyendas y modificando el tamaño de las letras los ejes,
sus títulos y del título principal.
plot(iris$Sepal.Width,iris$Sepal.Length,
#el tipo de símbolo del plot
pch = c(18, 16, 17)[as.numeric(iris$Species)],
cex.lab = 1.1, #tamaño de letra del título de los ejes
cex.axis = 0.8, #tamaño de los valores en los ejes
cex.main = 1.3,
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
#colores de los puntos según esta variable
col = c("slateblue4", "violetred","tomato1")[as.numeric(iris$Species)],
# título del gráfico
main = expression('Proporciones en spp del género '*italic(Iris)*' '),
#adicionamos la leyendas
legend("topleft", # posición de la legenda
levels(iris$Species), # niveles de especies/poblaciones(Factor)
pch = c(18, 16, 17), # tipo de símbolo
col = c("slateblue4", "violetred","tomato1"), # colores de la especies
cex = 0.72 #tamaño de letra en el cuadro de leyenda
)
# Colocar dos
o más graficos en uno solo
En el caso de que tengamos múltiples gráfico y querramos generar únicamente una
imagen podermos recurrir a la función par(). Esta función nos permitirá crear
gráficos según la cantidad de filas y columnas que le indiquemos.
#crea un espacio para gráficos de una fila y dos columnas
par(mfrow = c(1, 2))
#creas el plot 1
plot(iris$Sepal.Width,iris$Sepal.Length,
#el tipo de símbolo del plot
pch = c(18, 16, 17)[as.numeric(iris$Species)],
cex.lab = 0.9, #tamaño de letra del título de los ejes
cex.axis = 0.65, #tamaño de los valores en los ejes
cex.main = 1.3,
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
xlim=c(1.2,4.6), #expansión del exe x
#colores de los puntos según esta variable
col = c("slateblue4", "violetred","tomato1")[as.numeric(iris$Species)],
# título del gráfico
#main = expression('Proporciones en spp del género '*italic(Iris)*' '),
)
#adicionamos la leyendas
legend("topleft", # posición de la legenda
levels(iris$Species), # niveles de especies/poblaciones(Factor)
pch = c(18, 16, 17), # tipo de símbolo
col = c("slateblue4", "violetred","tomato1"), # colores de la especies
cex = 0.68 #tamaño de letra en el cuadro de leyenda
)
#creas el plot 2
plot(iris$Sepal.Length,iris$Petal.Length,
#el tipo de símbolo del plot
pch = c(18, 16, 17)[as.numeric(iris$Species)],
cex.lab = 0.9, #tamaño de letra del título de los ejes
cex.axis = 0.65, #tamaño de los valores en los ejes
cex.main = 1.3,
xlab = "Longitud del Sépado", #título eje de las X
ylab = "Longitud del Pétalo", #título eje de las Y
#colores de los puntos según esta variable
col = c("slateblue4", "violetred","tomato1")[as.numeric(iris$Species)],
# título del gráfico
#main = expression('Proporciones en spp del género '*italic(Iris)*' '),
#adicionamos la leyendas
legend("bottomright", # posición de la legenda
levels(iris$Species), # niveles de especies/poblaciones(Factor)
pch = c(18, 16, 17), # tipo de símbolo
col = c("slateblue4", "violetred","tomato1"), # colores de la especies
cex = 0.68 #tamaño de letra en el cuadro de leyenda
)
#creas el plot 1
#plot(iris$Sepal.Width,iris$Sepal.Length,
#el tipo de símbolo del plot
pch = c(18, 16, 17)[as.numeric(iris$Species)],
cex.lab = 0.9, #tamaño de letra del título de los ejes
cex.axis = 0.65, #tamaño de los valores en los ejes
cex.main = 1.3,
xlab = "Anchura del Sépado", #título eje de las X
ylab = "Longitud del Sépalo", #título eje de las Y
xlim=c(1.2,4.6), #expansión del exe x
#colores de los puntos según esta variable
col = c("slateblue4", "violetred","tomato1")[as.numeric(iris$Species)],
# título del gráfico
#main = expression('Proporciones en spp del género '*italic(Iris)*' '),
#adicionamos la leyendas
legend("topleft", # posición de la legenda
levels(iris$Species), # niveles de especies/poblaciones(Factor)
pch = c(18, 16, 17), # tipo de símbolo
col = c("slateblue4", "violetred","tomato1"), # colores de la
especies
cex = 0.68 #tamaño de letra en el cuadro de leyenda
)
#creas el plot 2
plot(iris$Sepal.Length,iris$Petal.Length,
#el tipo de símbolo del plot
pch = c(18, 16, 17)[as.numeric(iris$Species)],
cex.lab = 0.9, #tamaño de letra del título de los ejes
cex.axis = 0.65, #tamaño de los valores en los ejes
cex.main = 1.3,
xlab = "Longitud del Sépado", #título eje de las X
ylab = "Longitud del Pétalo", #título eje de las Y
#colores de los puntos según esta variable
col = c("slateblue4",
"violetred","tomato1")[as.numeric(iris$Species)], # título del gráfico
#main = expression('Proporciones en spp del género '*italic(Iris)*'
'),
#adicionamos la leyendas
legend("bottomright", # posición de la legenda
levels(iris$Species), # niveles de especies/poblaciones(Factor)
pch = c(18, 16, 17), # tipo de símbolo
col = c("slateblue4", "violetred","tomato1"), # colores de la
especies
cex = 0.68 #tamaño de letra en el cuadro de leyenda
)
#dev.off()
dev.off()
#fit
#plot(fit)