Cuando miro la fuente de los paquetes R, veo la función que se sweep
usa con bastante frecuencia. A veces se usa cuando una función más simple hubiera sido suficiente (por ejemplo, apply
), otras veces, es imposible saber exactamente lo que está haciendo sin dedicar una buena cantidad de tiempo a recorrer el bloque de código en el que se encuentra.
El hecho de que pueda reproducir sweep
el efecto usando una función más simple sugiere que no entiendo sweep
los casos de uso principales, y el hecho de que esta función se use con tanta frecuencia sugiere que es bastante útil.
El contexto:
sweep
es una función en la biblioteca estándar de R; sus argumentos son:
sweep(x, MARGIN, STATS, FUN="-", check.margin=T, ...)
# x is the data
# STATS refers to the summary statistics which you wish to 'sweep out'
# FUN is the function used to carry out the sweep, "-" is the default
Como se puede ver, los argumentos son similares a apply
pesar de que sweep
requiere un parámetro más, STATS
.
Otra diferencia clave es que sweep
devuelve una matriz de la misma forma que la matriz de entrada, mientras que el resultado devuelto por apply
depende de la función pasada.
sweep
en acción:
# e.g., use 'sweep' to express a given matrix in terms of distance from
# the respective column mean
# create some data:
M = matrix( 1:12, ncol=3)
# calculate column-wise mean for M
dx = colMeans(M)
# now 'sweep' that summary statistic from M
sweep(M, 2, dx, FUN="-")
[,1] [,2] [,3]
[1,] -1.5 -1.5 -1.5
[2,] -0.5 -0.5 -0.5
[3,] 0.5 0.5 0.5
[4,] 1.5 1.5 1.5
Entonces, en resumen, lo que estoy buscando es un caso de uso ejemplar o dos sweep
.
Por favor, no recite ni enlace a la Documentación de R, las listas de correo ni ninguna de las fuentes de R "primarias", suponga que las he leído. Lo que me interesa es cómo los programadores / analistas experimentados de R utilizan sweep
en su propio código.
apply
eso que puedo averiguar para este resultado es algo así t(apply(t(M), 2, "-", dx))
, pero eso es bastante desagradable.