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)