Este sencillo post nace de una pregunta que fue hecha en Stackoverflow. En su momento me pareció interesante para mostrar el uso de ...
dentro la definición de nuevas funciones que sólo requieren fijar un par de parámetros y mantener la funcionalidad del resto, en este caso se redefine la función hist
, utilizada para estimar y dibujar histogramas, que a partir de ella se crea histL
que en esencia hace lo mismo pero adicionalmente crea y pinta las etiquetas (labels) de los conteos de frecuencia o probabilidad, según sea el caso, sobre cada barra del histograma, algo así parecido a lo que hace SPSS, pero sin encasillarlas dentro de cuadros. El nombre histL
es debido a que se hacen hist
ogramas con L
abels.
Para resumir (lo que ya era corto), histL
estima un histograma a partir de datos tal y cual lo hace hist
, la diferencia es que esta nueva función añade etiquetas sobre cada barra que indica el conteo o la frecuencia asociada a esa barra particular, se imprime un indicador por cada barra del histograma. Todos los demás parámetros de la función hist
son aplicables a histL
de manera que la documentación de R disponible para hist
también es válida para histL
esto es cierto porque los parámetros son pasados a través del operator ...
como se muestra a continuación.
Definición de la función histL
# ============================================================================
# Nombre : histL
# Autor : J. Urbina
# Version : 0.01
# Descripción : Histogramas con etiquetas de frecuencias/probabilidades
# ============================================================================
histL <- function(x, ylim = NULL, freq = TRUE, ...) {
y <- hist(x, plot = FALSE)
if (freq == TRUE) {
z <- y$counts
} else {
z <- y$density
}
if (is.null(ylim)) {
ylim <- c(0, max(z) + ifelse(is.integer(z), 3, 0.1))
}
plot(y, ylim = ylim, freq = freq, ...)
# parámetros perdeterminados más `...` para aprovechar la funcionalidad ya
# implementada de `hist` a través de `plot.histogram`
text(y$mids, z + ifelse(is.integer(z), 1, 0.03), z, cex = 0.75)
}
Ejemplos
Algunos ejemplos que muestran que se pueden pasar todos los argumentos de hist
a histL
.
# Generando una muestra pseudo-aleatoria a partir de una normal estándar
set.seed(1)
x <- rnorm(100)
# Simple
hist(x) # sin etiquetas
histL(x) # con etiquetas
# se pueden usar todos los demás argumentos tal cual si fuera `hist`
histL(x, main = "Histograma de x con título")
hist(x, freq = FALSE) # histograma de la densidad de probabilidades sin etiquetas
histL(x, freq = FALSE) # histograma de la densidad de probabilidades con etiquetas
histL(x, freq = FALSE, main = "Histograma con líndea de densidad \n título en cursiva",
cex.main = 1.25, font.main = 3, xlab = "", las = 1, cex.axis = 0.8)
lines(density(x), col = "red")