Cuando miro la fuente de los paquetes R, veo la función que se sweepusa 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 sweepel efecto usando una función más simple sugiere que no entiendo sweeplos casos de uso principales, y el hecho de que esta función se use con tanta frecuencia sugiere que es bastante útil.
El contexto:
sweepes 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 applypesar de que sweeprequiere un parámetro más, STATS.
Otra diferencia clave es que sweepdevuelve una matriz de la misma forma que la matriz de entrada, mientras que el resultado devuelto por applydepende 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 sweepen su propio código.
applyeso que puedo averiguar para este resultado es algo así t(apply(t(M), 2, "-", dx)), pero eso es bastante desagradable.