La función sample() en R: muestras y valores aleatorios

sample() elige elementos al azar. Sirve para sortear, para barajar y —sobre todo— para sacar muestras de tus datos cuando trabajar con todo es demasiado.

Ejemplo simple

Cinco números al azar del 1 al 100:

sample(1:100, 5)

Si lo ejecutas dos veces, obtienes resultados distintos. Es normal: es aleatorio.

Por defecto no repite elementos. Si quieres que pueda repetirlos, como al tirar un dado:

sample(1:6, 10, replace = TRUE)

Sin replace = TRUE esto daría error, porque no puedes sacar 10 valores distintos de un conjunto de 6.

El detalle que casi nadie cuenta: set.seed()

Si tu análisis usa azar, cada vez que lo ejecutes te dará un resultado diferente. Eso hace imposible que otra persona reproduzca tu trabajo → o que lo reproduzcas tú mismo dentro de un mes.

La solución es fijar la semilla con set.seed():

set.seed(123)
sample(1:100, 5)

Ejecuta esas dos líneas las veces que quieras: siempre sale lo mismo. Y en cualquier ordenador. Sigue siendo aleatorio, pero reproducible.

Ponlo siempre antes de cualquier proceso con azar. Es una línea y te ahorra discusiones.

Ejemplo algo más completo: dividir datos en entrenamiento y test

Este es el uso real más habitual. Para entrenar un modelo necesitas separar una parte de los datos:

set.seed(123)

filas <- nrow(iris)
indices <- sample(1:filas, size = filas * 0.7)

entrenamiento <- iris[indices, ]
test <- iris[-indices, ]

nrow(entrenamiento)
nrow(test)

sample() elige el 70 % de las posiciones al azar. Con iris[indices, ] te quedas con esas filas, y con iris[-indices, ] con todas las demás → el signo menos excluye.

También sirve para barajar un conjunto entero, útil cuando los datos vienen ordenados por alguna variable y eso puede sesgar el análisis:

barajado <- iris[sample(1:nrow(iris)), ]
head(barajado)