Sección 3 Objetos en R
Los resultados de un cierto procedimiento pueden ser almacenados en diferentes
clases de objetos. R tiene cinco clases básicas de objetos, números (numeric
),
números complejos (complex
), cadenas de caracteres (character
),
factores (factor
) y valores lógicos (logical
). Éstos pueden juntarse para
formar vectores (vector
), matrices (matrix
), hojas de datos (data.frame
) o
listas (list
). Otras clases de objetos pueden ser funciones, modelos, objetos
espaciales, entre otros. En esta sección trabajaremos con algunos de ellos.
Para conocer la clase de un objeto se utiliza la función class
.
3.1 Vectores
Es el objeto más simple de R. Es importante tener en cuenta que los vectores
sólo contienen elementos de la misma clase básica. La función c()
puede
utilizarse para crear vectores concatenando sus argumentos.
<- c(2, 4, 6) #numérico (enteros)
x <- c(-1, 5, 9, 10.5) #numérico (continuo)
a <- c(4+2i, 2+5i) #números complejos
d <- c("a", "b", "c") #caracteres
y <- c(TRUE, TRUE, FALSE, T) #lógico z
Si quisiéramos concatenar x
y a
podríamos utilizar como argumentos de la
función c()
, a los objetos que quisiéramos agrupar.
<- c(2, 4, 6)
x <- c(-1, 5, 9, 10.5)
a <- c(x, a)
x_a
x_a## [1] 2.0 4.0 6.0 -1.0 5.0 9.0 10.5
length(x_a)
## [1] 7
Si quiséramos comprobar que el objeto x_a
tiene una longitud de
7 elementos (igual a la suma de elementos de los objetos
x
y a
), podemos utilizar la función length()
.
length(x) + length(a)
## [1] 7
length(x_a)
## [1] 7
Note que en el ejemplo anterior T
y F
es la
forma corta de especificar TRUE
y FALSE
. Es
recomendable utilizar la forma explícita de TRUE
y
FALSE
antes que la forma corta, dado que T
y
F
son símbolos que pueden redefinirse, por lo que no se
debería asumir que siempre se van a evaluar como operadores lógicos.
3.1.1 Secuencias
<- c(1, 2, 3, 4, 5)
x <- 1:10
x <- -5:3 y
Para generar secuencias de números enteros consecutivos se puede utilizar :
, pero si se desea generar otros tipos de secuencias, por ejemplo la secuencia 4,6,8,…,20, se debe utilizar la función seq
. Los argumentos de esta función permiten generar secuencias con saltos o longitud definida por el usuario.
seq(from = 4, to = 20, by = 2)
## [1] 4 6 8 10 12 14 16 18 20
Los argumentos de la función seq
, permiten generar
secuencia, desde (from
y, hasta (to
) los
valores especificados. Se pueden especificar el incremento de cada valor
(by
), o puede definirse el largo de la secuencia deseada
(length.out
).
3.1.2 Vectores con valores repetidos
Cuando se desea generar un vector con valores repetidos se puede utilizar la función rep
. Esta función replica los valores que se espicifican en el primer argumento, tantas veces o hasta alcanzar la longitud total que se especifique.
rep(1, 5)
## [1] 1 1 1 1 1
<- 1:3
x rep(x, 2)
## [1] 1 2 3 1 2 3
rep(x, c(2,4,1)) #En este caso repetirá el 1 dos vecesm el 2 cuatro veces y el 3 una vez.
## [1] 1 1 2 2 2 2 3
rep(x, length = 8)
## [1] 1 2 3 1 2 3 1 2
3.1.3 Vectores de factores
Los vectores que se generan pueden convertirse en factores, para ello se utiliza la función as.factor
.
<- as.factor(x) x_f
Tambien pueden generarse vectores que contiene factores utilizando gl
. A esta función se le debe especificar el número de niveles del factor y el número de repeticiones. Se le puede especificar el largo del vector y las etiquetas (labels
) de los factores.
gl(3, 5)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
gl(3, 5, length = 30)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
gl(3, 5, labels = c("grupo A", "grupo B", "grupo C"))
## [1] grupo A grupo A grupo A grupo A grupo A grupo B grupo B grupo B grupo B
## [10] grupo B grupo C grupo C grupo C grupo C grupo C
## Levels: grupo A grupo B grupo C
3.1.4 Seleccion de elementos de un vector
Los corchetes ([ ]
) se utilizan para indicar posición de un objeto. Se utilizan del lado derecho del objeto. Dado que los vectores son elementos de una dimensión, si se desea seleccionar el primer elemento del objeto x
se debe indicar x[1]
.
<- c(3,52,-8,2,1,7,11,-3,0,6,23,17)
x 1] x[
## [1] 3
3] x[
## [1] -8
c(1, 3)] x[
## [1] 3 -8
Si se desea sustituir un elemento del vector se puede utilizar el signo de asignación. Por ejemplo, si se desea sustituir el tercer elemento de x por 88:
3] <- 88
x[ x
## [1] 3 52 88 2 1 7 11 -3 0 6 23 17
Si se quiere obtener un vector sin algunos elementos, se debe anteponer el signo -
al valor del índice.
-3] x[
## [1] 3 52 2 1 7 11 -3 0 6 23 17
3.2 Matrices
Las matrices son vectores con atributo de dimensión (2 dimensiones: filas y columnas). A diferencia de los data.frame
s, todas las columnas de las matrices son de una misma clase. Para generar matrices se puede utilizar la función matrix
.
<- 1:20
x matrix(x, nrow = 5, ncol = 4)
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
Las matrices pueden ser creadas uniendo filas o columnas mediante las funciones cbind()
y rbind()
.
<- 1:3
x <- 10:12
y cbind(x, y)
## x y
## [1,] 1 10
## [2,] 2 11
## [3,] 3 12
rbind(x, y)
## [,1] [,2] [,3]
## x 1 2 3
## y 10 11 12
3.2.1 Operaciones con matrices:
A %*% B
: producto de matricest(A)
: traspuesta de la matriz Asolve(A)
: inversa de la matriz Asolve(A,b)
: solución del sistema de ecuaciones Ax=b.svd(A)
: descomposición en valores singularesqr(A)
: descomposición QReigen(A)
: valores y vectores propiosdiag(b)
: matriz diagonal. (b es un vector)diag(A)
: matriz diagonal. (A es una matriz)A %o% B == outer(A,B)
: producto exterior de dos vectores o matrices
3.3 Listas
Una lista es la forma generalizada de un vector que puede contener elementos de diferentes clases (número, vector, matriz, lista, etc.). Para crear lista se puede utilizar la función list()
. Dada su flexibilidad son contenedores generales de datos. Muchas funciones devuelven un conjunto de resultados de distinta longitud y distinto tipo en forma de lista.
<- c(2, 4, 6)
n <- c("aa", "bb", "cc", "dd", "ee")
s <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
b <- list(n, s, b)
x x
## [[1]]
## [1] 2 4 6
##
## [[2]]
## [1] "aa" "bb" "cc" "dd" "ee"
##
## [[3]]
## [1] TRUE FALSE TRUE FALSE FALSE
3.4 Hojas de datos (Data frames)
Es el objeto más común en R para almacenar datos. Sus columnas pueden ser de diferentes clases por ejemplo variables continuas y categóricas. Este tipo de objetos puede generarse mediante la función data.frame()
.
data.frame
convierte los vectores de caracteres en
factores automáticamente.
<- 1:10
x1 <- 24:33
x2 <- gl(2, 5, labels = c("si","no"))
x3 <- letters[1:10]
x4 data.frame(A = x1, B = x2, C = x3, D = x4)
## A B C D
## 1 1 24 si a
## 2 2 25 si b
## 3 3 26 si c
## 4 4 27 si d
## 5 5 28 si e
## 6 6 29 no f
## 7 7 30 no g
## 8 8 31 no h
## 9 9 32 no i
## 10 10 33 no j
3.5 Algunas funciones básicas predefinidas
summay()
mean()
var()
sd()
cor()
sum()
min()
max()
seq()
which()
which.min()
which.min()
length()
table()
is.na()
is.null()
complete.cases()
as.character()
as.numeric()
paste()
gsub()
unique()
lm()
dim()
nrow()
ncol()
colnames()
rownames()
edit()
cbind()
rbind()
order()
install.packages()
library()
Ejercitación
Vectores
Genere un vector
b
el cual contenga los valores dex
ya
¿Cuantos elementos tiene el vectorb
?Secuencias
Genere la secuencia 8,7,6,5,4
seq(4,20,2) ¿Este comando da eror? ¿Por qué?
Genere usando comandos para secuencias el vector de componentes: 1, 2, 3, 4, 5, 6, 73, 72, 71, 70, 69, 68, 3, 6, 9, 12, 15, 18.
Repetir valores
Genere un vector de componentes “azul”, “azul”,“azul”, “azul”, “amarillo”, “amarillo”, “verde”, “verde”,“verde”, llamado
col
. ¿Es un vector de factores?Matrices
Calcule la inversa y los autovalores y autovectores de
A = matrix(c(1,3,3,9,5,9,3,5,6), nrow = 3)