<- 4.5
x class(x)
[1] "numeric"
<- 4
x class(x)
[1] "numeric"
R es un lenguaje de programación ampliamente usado en estadística, debido a la gran cantidad de desarrollo que se ha hecho, el cual lo convierte en una herramienta muy útil para procesamiento, visualización y modelamiento de datos. Para empezar a utilizarlo hay que saber que funciona a través de estructuras de datos conocidas como objetos. A continuación se presentan los principales tipos de elementos y tipos de objetos.
Se refiere a números con parte entera y parte decimal. Aunque se defina unicamente la parte entera, R asume la parte decimal como 0.
Se refiere a números unicamente con parte entera. Para especificar que es un entero se debe poner el sufijo L, de lo contrario R lo interpreta como numeric
.
Pueden ser: TRUE
(verdadero) o FALSE
(falso).
Permiten definir varibles categóricas, es decir, es adecuado cuando se conocen las posibles categorias que toma la variable.
Permiten representar la fecha exacta deseada deacuerdo al formato que se indique.
[1] "2008-09-15"
[1] "1992-03-15"
Para acceder a un detalle de la fecha especificada se emplea el comando format
.
A continuación se presentan los símbolos para establecer el formato.
Símbolo | Descripción |
---|---|
%Y |
Año con cuatro dígitos |
%y |
Año con dos dígitos |
%m |
Mes en formato numérico (01-12) |
%b |
Nombre abreviado del mes |
%B |
Nombre completo del mes |
%d |
Día del mes (01-31) |
%a |
Nombre abreviado del día de la semana |
%A |
Nombre completo del día de la semana |
%j |
Día del año (001-366) |
%u |
Día de la semana (1 = lunes, 7 = domingo) |
%w |
Día de la semana (0 = domingo, 6 = sábado) |
%H |
Hora (00-23) |
%I |
Hora (01-12, formato AM/PM) |
%p |
AM o PM |
%M |
Minuto (00-59) |
%S |
Segundo (00-59) |
R coerciona los elementos implícitamente para realizar operaciones en caso de ser necesario, esto quiere decir, que los transforma de un tipo a otro.
El orden de coerción es: lógico -> entero -> numérico -> cadena de texto (logical -> integer -> numeric -> character). Un ejemplo claro lo tenemos al hacer la siguiente comparación, que nos da como resultado TRUE
.
Esto es muy importante tenerlo en cuenta para definir o realizar comparaciones entre objetos o elementos, ya que de lo contrario, se pueden producir resultados indeseados.
Cuando se especifican menos valores de lo que se requieren, R completa los espacios repitiendo la secuencia de valores dados. Se presenta un ejemplo claro en la siguiente sección (matrices).
Son elementos organizados de diferentes maneras con el fin de manejarlos estructuradamente.
Son colecciones de elementos del mismo tipo.
[1] "numeric"
[1] "A" "B" "C" "1"
[1] "character"
Como se observa, por la regla de coerción, los elementos en textos
son todos del tipo character
.
Son arreglos bidimensionales del mismo tipo. Se pueden formar a partir de vectores, teniendo en cuenta que las dimensiones sean adecuadas.
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
[,1] [,2] [,3] [,4]
numeros "1" "2" "3" "4"
textos "A" "B" "C" "1"
Si las dimensiones no coinciden se aplica la regla de completitud. Por ejemplo:
# Se define un vector de longitud 3
vector <- c(1, 2, 3)
# Se define una matriz de dimension 2 x 3
matriz <- matrix(vector, nrow = 2, ncol = 3)
matriz
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 1 3
# Se define una matriz de dimension 2 x 4
# la cual arroja una advertencia, ya que las longitudes no son múltiplos
matriz <- matrix(vector, nrow = 2, ncol = 4)
Warning in matrix(vector, nrow = 2, ncol = 4): data length [3] is not a
sub-multiple or multiple of the number of rows [2]
[,1] [,2] [,3] [,4]
[1,] 1 3 2 1
[2,] 2 1 3 2
Son la generalización de las matrices a más dimensiones. Se pueden formar a partir de vectores y/o matrices, teniendo en cuenta que las dimensiones sean adecuadas o se aplicará la regla de completitud.
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
, , 1
[,1] [,2] [,3] [,4]
[1,] "1" "3" "2" "1"
[2,] "2" "1" "3" "2"
, , 2
[,1] [,2] [,3] [,4]
[1,] "1" "2" "3" "4"
[2,] "A" "B" "C" "1"
Son estructuras bidimensionales que permiten columnas de diferentes tipos. Se emplean usualmente para representar tablas de datos cuando se tienen variables numéricas y categoricas simultáneamente.
Colección de elementos que puede ser de diferentes tipos, incluso otras colecciones de elementos como matrices o data frames.
$nombre
[1] "Juan"
$edad
[1] 25
$notas
[1] 8 9 10
[[1]]
[1] 1 2 3 4
[[2]]
[,1] [,2] [,3] [,4]
[1,] 1 3 2 1
[2,] 2 1 3 2
[[3]]
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
[[4]]
ID Nombre Edad Sexo
1 1 Ana 23 Femenino
2 2 Luis 30 Masculino
3 3 Juan 45 Masculino
Esto se puede hacer mediante las funciones as.numeric
, as.character
, as.factor
, as.vector
, as.matrix
, as.array
, as.data.frame
, as.list
, siempre que sean compatibles teniendo en cuenta la regla de coerción. Por ejemplo:
[1] 1
ID Nombre Edad Sexo
[1,] "1" "Ana" "23" "Femenino"
[2,] "2" "Luis" "30" "Masculino"
[3,] "3" "Juan" "45" "Masculino"
NA: Representa valores faltantes o desconocidos.
NULL: Representa que un objeto esta vacio.
NaN (Not a number): Representa un valor no numérico derivado de operaciones inválidas.
Hay diversas maneras de crear secuencias numéricas, útiles por ejemplo para definir indices, rangos para iterar sobre objetos, entre otras.
[1] 1 2 3 4 5 6 7 8 9 10
[1] 1 3 5 7 9
[1] 1.00 3.25 5.50 7.75 10.00
[1] 5 5 5 5 5 5 5 5 5 5
[1] 1 2 3 1 2 3 1 2 3 1 2 3
[1] 1 1 2 2 3 3
[1] 5 9 1 3 7 2 6 8 4 10
Permiten realizar operaciones aritméticas entre números.
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
+ |
Suma | 6 + 3 |
9 |
- |
Resta | 6 - 4 |
2 |
* |
Multiplicación | 4 * 3 |
12 |
/ |
División | 5 / 2 |
2.5 |
^ o ** |
Potenciación | 2^3 o 2**3 |
8 |
%% |
Módulo (resto de la división) | 5 %% 2 |
1 |
%/% |
División entera | 5 %/% 2 |
2 |
El orden en que se ejecutan los operadores son: primero lo que esta en parentesis ()
, seguido de ^
, **
-> *
, /
, %%
, %/%
-> +
, -
.
Permiten realizar operaciones entre valores lógicos y dan como resultado un valor lógico, como se muestra a continuación.
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
& |
AND lógico (elemento por elemento) | c(TRUE, FALSE) & c(TRUE, TRUE) |
TRUE, FALSE |
| |
OR lógico (elemento por elemento) | c(TRUE, FALSE) | c(FALSE, TRUE) |
TRUE, TRUE |
&& |
AND lógico (evaluación de primer elemento) | TRUE && FALSE |
FALSE |
|| |
OR lógico (evaluación de primer elemento) | TRUE || FALSE |
TRUE |
! |
Negación lógica | !TRUE |
FALSE |
xor() |
OR exclusivo (XOR) | xor(TRUE, FALSE) |
TRUE |
Permiten comparar objetos o elementos y devuelven como resultado un valor lógico.
Operador | Descripción | Ejemplo | Resultado |
---|---|---|---|
< |
Menor que | 5 < 3 |
FALSE |
> |
Mayor que | 5 > 3 |
TRUE |
<= |
Menor o igual que | 5 <= 5 |
TRUE |
>= |
Mayor o igual que | 5 >= 7 |
FALSE |
== |
Igual a | 5 == 5 |
TRUE |
!= |
Diferente de | 5 != 3 |
TRUE |
Cabe destacar que el operador ==
se emplea para comparar, y el resultado es un valor lógico.
Los operadores de asignación son =
y <-
. Es una buena práctica utilizar <-
para asignar valores a variables, o guardar objetos y =
únicamente para definir el valor de los argumentos que recibe una función. Cabe destacar que al asignar un valor a una variable que ya se había definido, se conserva el valor más reciente. Por ejemplo:
if
es una estructura de control que permite ejecutar un bloque de código cuando la condición es verdadera.
else
permite que adicionalmente, se ejecute un bloque de código cuando la condición es falsa.
ifelse
permite simplicar el condicional utilizando un enfoque vectorizado si se desea devolver un único valor.
Por ejemplo:
for
es una estructura que control que permite ejecutar repetidamente un bloque de código.
Para ilustrar como funciona el comando for
, se presentan dos ejemplos útiles en la práctica: como introducir elementos a una matriz y a una lista.
# Crear una matriz vacía de 3 filas y 4 columnas
ej_matriz <- matrix(NA, nrow = 3, ncol = 4)
# Llenar la matriz fila por fila
contador <- 1 # Valor incial
for (i in 1:nrow(ej_matriz)) { # para cada i = 1,2,3
for (j in 1:ncol(ej_matriz)) { # para cada j = 1,2,3,4
ej_matriz[i, j] <- contador
contador <- contador + 1 # Operación para actualizar el valor
}
}
matriz
[,1] [,2] [,3] [,4]
[1,] 1 3 2 1
[2,] 2 1 3 2
while
es una estructura de control que permite ejecutar un bloque de código repetidamente mientras la condición sea verdadera.
Por ejemplo:
limite <- 3
contador <- 0
while(contador < limite) {
print(paste(limite, ">", contador))
contador <- contador + 1
}
[1] "3 > 0"
[1] "3 > 1"
[1] "3 > 2"
Nota: Es importante tener cuidado con la condición, ya que si en ningún momento es falsa, se puede generar un bucle infinito.
break
permite detener la iteración de un bucle, y next
saltar una iteración del bucle.
Una función es un bloque de código reutilizable que realiza una tarea específica. Una función toma una entrada (argumentos), realiza una serie de operaciones y, opcionalmente, devuelve un resultado.
Por ejemplo, a continuación se crea una función que indica si un número es par.
es_par <- function(numero) {
if (numero %% 2 == 0) {
return(TRUE) # El número es par
} else {
return(FALSE) # El número no es par
}
}
es_par(4)
[1] TRUE
[1] FALSE
Esto es particularmente útil cuando se necesita utilizar varias veces un bloque de código que cumple una función determinada, por ejemplo para procesar imagenes o realizar transformaciones a tablas de datos. Por supuesto, tanto en el paquete base de R, como en paquetes que requieren instalación vienen establecidas gran cantidad de funciones que otras personas han desarrollado. Para la mayoría de tareas necesarias en el análisis de datos ya existen funciones que permiten realizarlas.
También es posible crear funciones anónimas empleando \
, y son útiles como argumento de otra función o para tareas rápidas.
Para ampliar la información presentada en este capítulo y conocer más acerca del funcionamiento de R, se recomienda consultar los manuales disponibles en la página oficial. Para acceder de click aquí.