Los operadores son los símbolos que le indican a R que debe realizar una tarea. Combinando datos y operadores es que logramos que R haga su trabajo.
Existen operadores específicos para cada tipo de tarea. Los tipos de operadores principales son los siguientes:
- Aritméticos
- Relacionales
- Lógicos
- De asignación
Familiarizarnos con los operadores nos permitirá manipular y transformar datos de distintos tipos.
Como su nombre lo indica, este tipo de operador es usado para operaciones aritméticas.
En R tenemos los siguientes operadores aritméticos:
Operador | Operación | Ejemplo | Resultado |
---|---|---|---|
+ |
Suma | 5 + 3 |
8 |
- |
Resta | 5 - 3 |
2 |
* |
Multiplicación | 5 * 3 |
18 |
/ |
División | 5 /3 |
1.666667 |
^ |
Potencia | 5 ^ 3 |
125 |
%% |
División entera | 5 %% 3 |
2 |
Es posible realizar operaciones aritméticas con datos de tipo entero y numérico.
Si escribes una operación aritmética en la consola de R y das Enter, esta se realiza y se devuelve su resultado.
15 * 3
## [1] 45
Cuando intentas realizar una operación aritmética con otro tipo de dato, R primero intentará coercionar ese dato a uno numérico. Si la coerción tiene éxito se realizará la operación normalmente, si falla, el resultado será un error.
Por ejemplo, 4 + "tres"
devuelve: Error in 4 + "tres" : non-numeric argument for binary operator."
4 + "tres"
## Error in 4 + "tres": argumento no-numérico para operador binario
El mensaje "non-numeric argument for binary operator" aparece siempre que intentas realizar una operación aritmética con un argumento no numérico. Si te encuentras un un error que contiene este mensaje, es la primera pista para que identifiques donde ha ocurrido un problema.
Cualquier operación aritmética que intentemos con un dato NA
, devolverá NA
como resultado.
NA - 66
## [1] NA
21 * NA
## [1] NA
NA ^ 13
## [1] NA
Entre los operadores aritméticos, el de división entera o módulo requiere una explicación adicional sobre su uso. La operación que realiza es una división de un número entre otro, pero en lugar de devolver el cociente, nos devuelve el residuo.
Por ejemplo, si hacemos una división entera de 4 entre 2, el resultado será 0. Esta es una división exacta y no tiene residuo.
4 %% 2
## [1] 0
En cambio, si hacemos una división entera de 5 entre 2, el resultado será 1, pues este es el residuo de la operación.
5 %% 2
## [1] 1
Los operadores lógicos son usados para hacer comparaciones y siempre devuelven como resultado TRUE
o FALSE
(verdadero o falso, respectivamente).
Operador | Comparación | Ejemplo | Resultado |
---|---|---|---|
< |
Menor que | 5 < 3 |
FALSE |
<= |
Menor o igual que | 5 <= 3 |
FALSE |
> |
Mayor que | 5 > 3 |
TRUE |
>= |
Mayor o igual que | 5 >= 3 |
TRUE |
== |
Exactamente igual que | 5 == 3 |
FALSE |
!= |
No es igual que | 5 != 3 |
TRUE |
Es posible comparar cualquier tipo de dato sin que resulte en un error.
Sin embargo, al usar los operadores >
, >=
, <
y <=
con cadenas de texto, estos tienen un comportamiento especial.
Por ejemplo, "casa" > "barco"
nos devuelve TRUE
.
"casa" > "barco"
## [1] TRUE
Este resultado se debe a que se ha hecho una comparación por orden alfabético. En este caso, la palabra "casa" tendría una posición posterior a "barco", pues empieza con "c" y esta letra tiene una posición posterior a la "b" en el alfabeto. Por lo tanto, es verdadero que sea "mayor".
Cuando intentamos comparar factores, siempre obtendremos como resultado NA
y una advertencia acerca de que estos operadores no son significativos para datos de tipo factor.
as.factor("casa") > "barco"
## Warning in Ops.factor(as.factor("casa"), "barco"): '>' not meaningful for
## factors
## [1] NA
Los operadores lógicos son usados para operaciones de álgebra Booleana, es decir, para describir relaciones lógicas, expresadas como verdadero (TRUE
) o falso (FALSO
).
Operador | Comparación | Ejemplo | Resultado |
---|---|---|---|
`x | y` | x Ó y es verdadero | `TRUE |
x & y |
x Y y son verdaderos | TRUE & FALSE |
FALSE |
!x |
x no es verdadero (negación) | !TRUE |
FALSE |
isTRUE(x) |
x es verdadero (afirmación) | isTRUE(TRUE) |
TRUE |
Los operadores |
y &
siguen estas reglas:
|
devuelveTRUE
si alguno de los datos esTRUE
&
solo devuelveTRUE
si ambos datos esTRUE
|
solo devuelveFALSE
si ambos datos sonFALSE
&
devuelveFALSE
si alguno de los datos esFALSE
Estos operadores pueden ser usados con estos con datos de tipo numérico, lógico y complejo. Al igual que con los operadores relacionales, los operadores lógicos siempre devuelven TRUE
o FALSE
.
Para realizar operaciones lógicas, todos los valores numéricos y complejos distintos a 0
son coercionados a TRUE
, mientras que 0
siempre es coercionado a FALSE
.
Por ejemplo, 5 | 0
resulta en TRUE
y 5 & FALSE
resulta en FALSE
. Podemos comprobar lo anterior con la función isTRUE()
.
5 | 0
## [1] TRUE
5 & 0
## [1] FALSE
isTRUE(0)
## [1] FALSE
isTRUE(5)
## [1] FALSE
Estos operadores se pueden combinar para expresar relaciones complejas.
Por ejemplo, la negación FALSE
Y FALSE
dará como resultado TRUE
.
!(FALSE | FALSE)
## [1] TRUE
También podemos combinar operadores lógicos y relacionales, dado que esto últimos dan como resultado TRUE
y FALSE
.
## [1] TRUE
Este es probablemente el operador más importante de todos, pues nos permite asignar datos a variables.
Operador | Operación |
---|---|
<- |
Asigna un valor a una variable |
= |
Asigna un valor a una variable |
Aunque podemos usar el signo igual para una asignación, a lo largo de este libro utilizaremos <-
, por ser característico de R y fácil de reconocer visualmente.
Después de realizar la operación de asignación, podemos usar el nombre de la variable para realizar operaciones con ella, como si fuera del tipo de datos que le hemos asignado. Si asignamos un valor a una variable a la que ya habíamos asignado datos, nuestra variable conserva el valor más reciente.
Además, esta operación nos permite "guardar" el resultado de operaciones, de modo que los podemos recuperar sin necesidad de realizar las operaciones otra vez. Basta con llamar el nombre de la variable en la consola
En este ejemplo, asignamos valores a las variables estatura
y peso
.
estatura <- 1.73
peso <- 83
Llamamos a sus valores asignados
estatura
## [1] 1.73
peso
## [1] 83
Usamos los valores asignados para realizar operaciones.
peso / estatura ^ 2
## [1] 27.7323
Cambiamos el valor de una variable a uno nuevo y realizamos operaciones
peso <- 76
peso
## [1] 76
peso / estatura ^ 2
## [1] 25.39343
estatura <- 1.56
peso <- 48
peso / estatura ^ 2
## [1] 19.72387
Asignamos el resultado de una operación a una variable nueva.
bmi <- peso / estatura ^ 2
bmi
## [1] 19.72387
Como podrás ver, es posible asignar a una variable valores de otra variable o el resultado de operaciones con otras variables.
velocidad_inicial <- 110
velocidad_final <- 185
tiempo_inicial <- 0
tiempo_final <- 15
variacion_velocidad <- velocidad_final - velocidad_inicial
variacion_tiempo <- tiempo_final - tiempo_inicial
variacion_velocidad / variacion_tiempo
## [1] 5
En R, al igual que en matemáticas, las operaciones tienen un orden de evaluación definido.
Cuanto tenemos varias operaciones ocurriendo al mismo tiempo, en realidad, algunas de ellas son realizadas antes que otras y el resultado de ellas dependerá de este orden.
El orden de operaciones incluye a las aritméticas, relacionales, lógicas y de asignación.
En la tabla siguiente se presenta el orden en que ocurren las operaciones que hemos revisado en este capítulo.
Orden | Operadores |
---|---|
1 | ^ |
2 | * / |
3 | + - |
4 | < > <= >= == != |
5 | ! |
6 | & |
7 | ` |
8 | <- |
Si deseamos que una operación ocurra antes que otra, rompiendo este orden de evaluación, usamos paréntesis.
Podemos tener paréntesis anidados.