Operadores en R

Introducción a R Conceptos básicos de R
Conoce los operadores del lenguaje de programación R

Hay varios operadores en R. Esto incluye operadores aritméticos para cálculos matemáticos, operadores lógicos, relacionales o de asignación o incluso el popular operador pipe. En este tutorial, mostraremos los operadores de R divididos según tipo, mediante ejemplos de uso de cada operador.

Operadores aritméticos

Los operadores aritméticos de R nos permiten realizar operaciones matemáticas, como sumas, divisiones o multiplicaciones, entre otras. La siguiente tabla resume todos los operadores aritméticos de R base.

Operador aritmético en R Descripción
+ Suma
Resta
* Multiplicación
/ División
^ Exponencial
** Exponencial
%% Módulo
%/% División entera
%*% Multiplicación matricial
%o% Producto exterior
%x% Producto Kronecker

En el siguiente bloque de código encontrarás ejemplos de operaciones aritméticas básicas con números enteros.

#---------------------
# Operaciones básicas
#---------------------

3 + 5   # 8
8 - 3   # 5
7 * 5   # 35
1/2     # 0.5
4 ^ 4   # 256
4 ** 4  # 256
5 %% 3  # 2
5 %/% 3 # 1

También puedes usar los operadores aritméticos con vectores de R de la misma longitud. La salida de estas operaciones será un vector con el resultado de la operación elemento a elemento.

#---------
# Vectores
#---------

x <- c(1, 7, 3)
y <- c(9, 4, 5)

x + y   # 10 11  8
x - y   # -8  3 -2
x * y   #  9 28 15
x / 2   #  0.5 3.5 1.5

# Cada elemento del primer vector elevado
# al elemento correspondiente del segundo
x ** y  # 1 2401  243 
x ^ y   # 1 2401  243

x %% y  # 1 3 3
x %/% y # 0 1 0

Asimismo, puedes usar los operadores aritméticos con matrices, además de los diseñados para este tipo de objeto (multiplicaciones matriciales). Consulta nuestro artículo sobre operaciones con matrices para saber más.

#---------
# Matrices
#---------

s <- matrix(1:6, nrow = 2, ncol = 3)
t <- matrix(8:13, nrow = 2, ncol = 3)

s
#      [, 1] [, 2] [, 3]
# [1, ]   1     3     5
# [2, ]   2     4     6

t
#      [, 1] [, 2] [, 3]
# [1, ]   8    10    12
# [2, ]   9    11    13


# Suma de matrices elemento a elemento

s + t

#      [, 1] [, 2] [, 3]
# [1, ]   9    13    17
# [2, ]  11    15    19


# Multiplicación de matrices elemento a elemento
s * t

#       [, 1] [, 2] [, 3]
# [1, ]    8   30   60
# [2, ]   18   44   78

# Ten en cuenta que se necesitan las dimensiones
# correctas para la multiplicación de matrices
w <- matrix(8:13, nrow = 2, ncol = 3)
z <- matrix(1:6, nrow = 3, ncol = 2)

w %*% z

#       [, 1] [, 2]
# [1, ]   64   154
# [2, ]   70   169

# Producto exterior
w %o% z # (Salida omitida)

# Producto Kronecker
w %x% z

#        [, 1] [, 2] [, 3] [, 4] [, 5] [, 6]
# [1, ]     8    32    10    40    12    48
# [2, ]    16    40    20    50    24    60
# [3, ]    24    48    30    60    36    72
# [4, ]     9    36    11    44    13    52
# [5, ]    18    45    22    55    26    65
# [6, ]    27    54    33    66    39    78

Operadores lógicos en R

Los operadores booleanos o lógicos en R se utilizan para especificar múltiples condiciones entre objetos. Estas comparaciones devuelven valores TRUE o FALSE.

Operador lógico en R Descripción
& Comparación lógica ‘AND’ (Y) elemento a elemento
&& Comparación lógica ‘AND’ de vectores
| Comparación lógica ‘OR’ (O) elemento a elemento
|| Comparación lógica ‘OR’ de vectores
! Negación lógica ‘NOT’ (NO)
xor() Exclusión ‘OR’ elemento a elemento
equivalente a !( x | y)
40 & 5 > 30 # FALSE
40 | 5 > 30 # TRUE
!TRUE  # FALSE
!FALSE # TRUE

#---------
# Vectores
#---------

x <- c(3, 4, 5)
y <- c(3, 5, 1)

x & y   # TRUE TRUE TRUE
x && y  # TRUE

x | y   # TRUE TRUE TRUE
x || y  # TRUE

!x # FALSE FALSE FALSE

xor(x, y) # FALSE FALSE FALSE

Operadores relacionales en R

Los operadores de comparación o relacionales están diseñados para comparar objetos. El resultado de estas comparaciones son de tipo booleano. La siguiente tabla resume los operadores relacionales de R.

Operador relacional en R Descripción
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igual a
!= Distinto a

Puedes comparar valores numéricos con estos operadores de la siguiente manera.

#--------------------
# Operaciones básicas
#--------------------

3 > 5  # FALSE
3 < 5  # TRUE
3 >= 5 # FALSE
3 <= 5 # TRUE
3 == 5 # FALSE
3 != 5 # TRUE

Si comparas vectores, la salida será otro vector de la misma longitud y cada elemento contendrá el valor booleano correspondiente a la comparación de los elementos correspondientes (primer elemento del primer vector con el primer elemento del segundo vector, etc.). También puedes comparar cada elemento de una matriz con cada elemento de otra.

#---------
# Vectores
#---------

x <- c(12, 4 , 14)
y <- c(3, 4, 15)

x >= y # TRUE TRUE FALSE
x <= y # FALSE TRUE TRUE
x == y # FALSE TRUE FALSE
x != y # TRUE FALSE  TRUE

#---------
# Matrices
#---------

# Ten en cuenta que la matriz debe tener la misma dimensión
# La comparación es elemento por elemento

s <- matrix(1:6, nrow = 2, ncol = 3)
t <- matrix(8:13, nrow = 2, ncol = 3)


s > t

#        [, 1]  [, 2]  [, 3]
# [1, ]  FALSE  FALSE  FALSE
# [2, ]  FALSE  FALSE  FALSE

s < t
s >= t
s <= t
s == t

Los operadores lógicos y los relacionales se utilizan por ejemplo para crear condicionales con la función if. Considera el simple ejemplo en el que quieres imprimir en pantalla el mensaje "Correcto" si dos valores (x e y) suman más de 20 o "Incorrecto" en caso contrario.

x <- 10
y <- 9

if(x + y > 20) {
    print("Correcto")
} else {
    print("Incorrecto")
}
 "Incorrecto"

Ya que x + y < 20 devuelve un FALSE, el resultado es el código que se ejecuta en el else.

Operadores de asignación

Los operadores de asignación en R permiten asignar datos a un objeto para almacenar los datos.

Operador de asignación en R Descripción
<- Asignación izquierda
= Asignación izquierda
(no recomendado)
y asignación de argumentos
-> Asignación derecha
<<- Asignación lexicográfica izquierda
(para usuarios avanzados)
->> Asignación lexicográfica derecha
(para usuarios avanzados)

Nótese que en la mayoría de lenguajes de programación de comandos puedes usar el operador igual (=). Sin embargo, en R se recomienda usar la asignación de flecha (<-) y usar el signo igual para establecer parámetros en los argumentos.

La flecha de asignación se puede usar como asignación izquierda o derecha, pero la asignación derecha no se usa generalmente. También puedes usar la asignación de doble flecha, conocida como asignación de alcance lexicográfico, pero no entraremos en más detalle en este tutorial, ya que es para usuarios avanzados. Puedes saber más sobre la doble asignación en nuestro artículo sobre funciones en R.

En el siguiente bloque de código encontrarás algunos ejemplos de estos operadores.

x <- 3
x = 26
rnorm(n = 10)

3 -> y

w <<- 7
7 ->> z

Si necesitas utilizar la asignación derecha, recuerda que el objeto que quieras almacenar debe estar a la izquierda, o se producirá un error.

Debe tenerse en cuenta que hay algunas reglas a la hora de nombrar variables. Puedes usar letras, números, puntos y guiones bajos en el nombre de la variable, pero los guiones bajos no pueden ser el primer carácter del nombre de la variable.

Palabras reservadas

También hay palabras reservadas que no se pueden usar, como TRUE, FALSE o NULL, entre otras. Puedes ver la lista completa de palabras reservadas escribiendo help(Reserved) o ?Reserved en la consola de comandos.

Sin embargo, si por alguna razón necesitas nombrar una variable con una palabra reservada o comenzar con un guión bajo, tendrás que usar acentos graves (backticks):

_variable <- 3    # Error
`_variable` <- 3  # Funciona

TRUE <- 3   # Error
`TRUE` <- 3 # Funciona

Operadores misceláneos

Los operadores misceláneos en R son operadores utilizados para propósitos específicos, como acceder a datos, funciones, crear secuencias o especificar la fórmula de un modelo. La siguiente tabla contiene todos los operadores misceláneos disponibles en R.

Operador misceláneo en R Descripción
$ Subconjunto de un data frame
o lista con nombres
: Generador de secuencias
:: Acceso a funciones de paquetes
(No suele ser necesario utilizarlo)
::: Acceso a funciones internas de paquetes
~ Formulación de modelos
@ Acceso a slots en clases S4
(Avanzado)

En el siguiente bloque de código mostramos varios ejemplos de estos operadores:

df <- data.frame(x = c(7, 9, 2), y = c(5, 9, 5))
# Accedemos a la variable x
df$x

# Secuencia de 1 a 5
1:5

# Función rnorm del paquete stats
stats::rnorm(10)

# Fórmula modelo lineal
lm(df$x ~ df$y)

Operador infix

Puedes llamar a un operador como una función. Esto se conoce como operadores infix. En el siguiente bloque de código mostramos algunos ejemplos. Ten en cuenta que el ejemplo de este tipo de operador es solo para fines educativos, ya que generalmente no se usa ni se necesita.

`+`(3, 2) # Equivalente a 3 + 2
`*`(5, 9) # Equivalente a 5 * 9
`>`(6, 1) # Equivalente a 6 > 1

Operador pipe en R

El operador pipe o tubería es un operador que puedes encontrar en varias bibliotecas, como el paquete dplyr. El operador se puede leer como “Y LUEGO” y su propósito es simplificar la sintaxis al escribir código R. Como ejemplo, puedes crear un subconjunto de los datos cars y luego crear un resumen del subconjunto con el siguiente código:

# install.packages("dplyr")
library(dplyr)

cars %>% 
   subset(speed > 20) %>% 
   summary()
     speed            dist       
 Min.   :22.00   Min.   : 54.00  
 1st Qu.:23.50   1st Qu.: 68.00  
 Median :24.00   Median : 85.00  
 Mean   :23.71   Mean   : 82.86  
 3rd Qu.:24.00   3rd Qu.: 92.50  
 Max.   :25.00   Max.   :120.00