Objetos y operadores

Objetos comunes en R

Como ya vimos anteriormente, R es un lenguaje orientado a objetos y existe una gran variedad de “cosas” que estos objetos pueden contener/almacenar. En general, los objetos que presentamos a continuación permiten realizar la mayoría de las tareas cotidianas en R.

Objeto Descripción
vector Colección de objetos de un mismo tipo (números enteros, números reales, texto, etc.). Los vectores son los objetos básicos a partir de los cuales pueden crearse gran parte del resto de los objetos más relevantes en R.
data.frame Tabla que contiene datos, conformada por una serie de columnas como vectores. Las columnas de un data.frame pueden ser vectores de distinto tipo. Generalmente, estos objetos son cargados por el usuario a partir de un archivo, pero también pueden ser creados con la función data.frame().
matrix Colección de vectores organizado en filas y columnas. A diferencia de un data.frame, es un objeto que permite operaciones matemáticas propias de las matrices (e.g., suma o producto de matrices).
list Es una coleccion de objetos de cualquier tipo, sean vectores, tablas, matrices, otras listas y más. Gran parte de las salidas de las funciones de R son listas, por ejemplo, la salida de un modelo lineal con la funcion lm().

Operadores

Un operador es una expresión, compuesta por uno o más símbolos, que realiza una operación específica sobre uno o más valores para producir un resultado.

Operadores aritméticos

Relacionan dos números para generar un resultado.

Símbolo Operación
+ Suma
- Resta
* Multiplicación
/ División
^ Potenciación
%/% División entera
%% Resto de la división

Por ejemplo:

5 + 7
[1] 12
3^4
[1] 81

El uso de paréntesis muchas veces es necesario:

3^(4+3)
[1] 2187
10 %/% 3
[1] 3
10 %% 3
[1] 1

Operadores relacionales

Relacionan un valor con otro y devuelven una constante lógica (TRUE o FALSE).

Símbolo Operación
< Menor a…
<= Menor o igual a..
> Mayor a…
>= Mayor o igual a…
== Igual a…
!= Distinto de…

Por ejemplo:

8 > 9
[1] FALSE
8 >= 9
[1] FALSE
5 == 5
[1] TRUE
12 != 12
[1] FALSE

Operadores lógicos o booleanos

Estos operadores devuelven una constante lógica (TRUE o FALSE).

Símbolo Operación
! Negación
& Y
&& Y secuencial
| O
|| O secuencial
xor Unión excluyente

Image

George Boole, matemático inglés. En su honor, los operadores lógicos también se llaman “booleanos”.


Para entender cómo funcionan estos operadores las tablas de verdad son útiles. Aquí, aprenderemos el comportamiento de estos operadores mediante ejemplos.

El operador ! devuelve el resultado opuesto de una expresión lógica dada:

!(10 > 5)
[1] FALSE

El operador & (Y) combina dos o más expresiones, y devuelve TRUE sólo si todas las expresiones lógicas son verdaderas:

(10 > 5) & (30 > 20)
[1] TRUE

En cambio, devuelve FALSE si alguna de ellas no es verdadera:

(10 > 5) & (30 > 40)
[1] FALSE

El operador | (O) combina dos o más expresiones, y devuelve TRUE si al menos una de las expresiones lógicas son verdaderas:

(10 > 5) | (30 > 40)
[1] TRUE

En cambio, devuelve FALSE si ninguna de las expresiones son verdaderas:

(10 > 15) | (30 > 40)
[1] FALSE

El operador xor es en realidad una función con dos argumentos. Sólo devuelve TRUE cuando una condición es verdadera y la otra es falsa:

xor(10 > 5, 30 > 40)
[1] TRUE

En cambio, devuelve FALSE cuando ambas expresiones son verdaderas:

xor(10 > 5, 30 > 20)
[1] FALSE

O ambas son falsas:

xor(10 > 15, 30 > 40)
[1] FALSE

Los operadores && y || trabajan secuencialmente, sólo evalúan la segunda condición si la primera es TRUE. Si la primera condición ya es FALSE, no se evalúa la segunda condición. Adquieren mayor sentido cuando el segundo elemento de la comparación no está definido, y suele utilizarse en contextos de programación más avanzada. Por ejemplo:

a <- 5
a < 3 && b > 10
[1] FALSE

Aquí vemos que el objeto b no existe en el ambiente de R. Sin embargo, el resultado es FALSE porque la primera condición ya es falsa. Si hiciéramos la misma comparación con &, R devuelve un error:

a <- 5
a < 3 & b > 10
Error in eval(expr, envir, enclos): object 'b' not found

Veamos un ejemplo similar con el operador ||:

a <- 5
a > 3 || b > 10
[1] TRUE

El resultado es TRUE, porque la primera condición ya es verdadera. El mismo código con | arroja un error:

a <- 5
a > 3 | b > 10
Error in eval(expr, envir, enclos): object 'b' not found

Las funciones all() y any() permiten evaluar más de una condición simultáneamente. La función all() devuelve TRUE si todas las condiciones indicadas son verdaderas, caso contrario devuelve FALSE. Su comportamiento es análogo al operador & utilizado secuencialmente. Las condiciones se escriben de a una y separadas por coma. Por ejemplo:

a <- 5
b <- 10
c <- 15
all(a > 3, b > 8, c > 11)
[1] TRUE

Todas las condiciones son verdaderas, por lo que devuelve TRUE. Si en cambio al menos una es falsa, obtenemos FALSE:

all(a > 3, b > 8, c > 21)
[1] FALSE

La función any() devuelve TRUE si al menos una condición es verdadera. Su comportamiento es análogo al operador | utilizado de manera secuencial. Por ejemplo:

any(a > 7, b > 12, c > 13)
[1] TRUE

En cambio, si todas las condiciones son falsas, any() devuelve FALSE:

any(a > 7, b > 12, c > 23)
[1] FALSE

Ejercicios

  1. La variable y puede calcularse mediante la siguiente fórmula:

\[ \hspace{-9cm} y = a + b\sqrt{x+2} + cx^2 \]

Siendo a = 5.3, b = 3.2 y c = 1.7, calcule el valor de y cuando x = 20.

  1. Sin correr las siguientes líneas, ¿cuál es el resultado de cada expresión?
x <- 10
y <- 90

(x <= 10) & (y > 40)
(x == 10) | (y == 89)
((x > 5) & (y != 70)) & (x*y > 1000)
  1. ¿Qué hacen las funciones round(), floor(), ceiling() y trunc()?
round(x = 6.756)
round(6.756, digits = 2)
trunc(6.756)
ceiling(6.356)
floor(x = 6.756)

Volver arriba