3.5 Operaciones matemáticas y vectorización

R puede ser usado como una calculadora:

2+2
## [1] 4
x <- 4*(3+5)^2
x / 10
## [1] 25.6

En R se puede operar sobre vectores igual que se opera sobre números. De hecho, en R, un número es un vector numérico de longitud 1:

c(length(2), length(x))
## [1] 1 1

Así que se pueden hacer cosas tales como:

x <- 1:10
2*x
2*x + 1
x^2
x*x

Operaciones como las anteriores están vectorizadas, i.e., admiten un vector como argumento y operan sobre cada uno de los elementos. Generalmente, las operaciones vectorizadas son muy rápidas en R. Muchos problemas de rendimiento en R se resuelven, de hecho, utilizando versiones vectorizadas del código ineficiente17.

Comprueba que log es una función vectorizada aplicándosela a x.

Calcula el valor medio de la longitud de los pétalos de iris usando mean.

Repite el ejercicio anterior usando sum y length.

Suma un millón de términos de la fórmula de Leibniz] para aproximar \(\pi\). Pista: crea primero un vector con los índices (del 0 al 1000000) y transfórmalo adecuadamente.

Si x <- 1:10 e y <- 1:2, ¿cuánto vale x * y? ¿Qué pasa si y <- 1:3?

La operación a la que se refiere el ejercicio anterior se denomina reciclado de vectores. Cuando se opera con dos vectores (por ejemplo, para multiplicarlos) con longitudes distintas, el más corto se recicla (es decir, se repite) tantas veces como sea necesario hasta alcanzar la longitud del más largo. Si la longitud del más corto no divide exactamente la del más largo (p.e., uno tiene longitud 10 y otro, longitud 3), R recorta la parte reciclada sobrante y lanza un warning.

El lector está invitado a consultar cómo construir con R una calculadora de hipotecas, que ilustra el uso de la vectorización en un problema menos trivial que los anteriores, en el capítulo dedicado a ejemplos de uso.


  1. De hecho, uno de los errores más frecuentes de los novatos en R que tienen experiencia previa en lenguajes de programación tales como Java, C o Matlab es utilizar código no vectorizado: blucles for y similares. En R se prefiere casi siempre recurrir a la vectorización.