Tracks
/
R
R
/
Temario
/
Funciones de vectores
Fu

Funciones de vectores en R

1 ejercicio

Acerca de Funciones de vectores

Este es un concepto muy amplio en R. Para ayudar a entender bien las posibilidades, puede ser útil tener en cuenta la dimensionalidad de la entrada y la salida de las distintas funciones.

Entrada vectorial, salida escalar

Ya hemos visto funciones que reciben un vector y devuelven un único valor de tipo escalar:

v <- 1:5
length(v)
#> [1] 5
sum(v)
#> [1] 15

Muchas funciones estadísticas también pertenecen a esta categoría, como mean().

Para los vectores lógicos, están all() y any(), que devuelven un único TRUE o FALSE.

Entrada vectorial, salida vectorial

Muchas funciones de R operan sobre vectores completos y a menudo producen una salida vectorial. Esto incluye la mayoría de las funciones matemáticas:

sq <- c(4, 9, 16, 25)
sqrt(sq) # square root
#> [1] 2 3 4 5

Esto no solo es conciso y cómodo, ya que evita la necesidad de bucles, comprensiones de listas o recursión, que son habituales en otros lenguajes. En R, las funciones vectoriales suelen ejecutarse mucho más rápido que esas técnicas.

Ya has usado funciones vectorizadas más de lo que probablemente crees. Compara estas:

v <- c(2, 7, 9)
w <- c(3, 1, 5)
v + w
#> [1]  5  8 14
"+"(v, w)
#> [1]  5  8 14

Los conocidos operadores infijos no son más que azúcar sintáctico de la función vectorizada subyacente. En este caso, "+"().

Para ordenar un vector, están sort(), que devuelve los valores, y order(), que devuelve los índices:

v <- c("I", "am", "not", "in", "order")
sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
order(v)
#> [1] 2 1 4 3 5

El comportamiento predeterminado es ordenar de forma ascendente. Especifica decreasing = TRUE si es necesario, o usa rev() para invertir un vector existente.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

También hay funciones como cumsum() y cumprod() que producen salidas vectoriales acumulativas, operando sobre el vector de entrada de izquierda a derecha:

cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

Los ejemplos anteriores son similares a las operaciones foldl de muchos lenguajes funcionales, salvo que la salida es un vector con todos los valores intermedios.

Varios vectores de entrada, vector de salida

Una extensión de este concepto también sirve para comparar vectores. Por ejemplo, fíjate en la función de máximo por pares pmax():

v
#> [1] 2 7 9
w
#> [1] 3 1 5
pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Esta función y otras similares también aceptan un número arbitrario de vectores de entrada, no solo dos.

El ejemplo anterior usa vectores de la misma longitud. Como se explica en el concepto Filtrado de vectores, R usa el reciclaje para extender los vectores que de algún modo son «demasiado cortos». Lo repetimos: úsalo con cuidado y, preferiblemente, solo con un vector de longitud 1.

pmax(v, 5)
#> [1] 5 7 9

Entrada vectorial, salida matricial

Es menos habitual, pero es bastante fácil escribir funciones que en apariencia son de escalar de entrada y vector de salida. Cuando se les pasa un vector de entrada, la salida es una matrix bidimensional (que se trata en un concepto posterior).

Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Funciones de vectores