Quando guardo l'origine di R Packages, vedo la funzione sweepusata abbastanza spesso. A volte viene utilizzato quando una funzione più semplice sarebbe bastata (ad esempio apply), altre volte, è impossibile sapere esattamente cosa sta facendo senza spendere una discreta quantità di tempo per passare attraverso il blocco di codice in cui si trova.
Il fatto che io possa riprodurre sweepl'effetto di usando una funzione più semplice suggerisce che non capisco sweepi casi d'uso principali, e il fatto che questa funzione sia usata così spesso suggerisce che sia abbastanza utile.
Il contesto:
sweepè una funzione nella libreria standard di R; i suoi argomenti sono:
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
Come si può vedere, gli argomenti sono simili a applyse sweeprichiede un altro parametro, STATS.
Un'altra differenza fondamentale è che sweeprestituisce un array della stessa forma dell'array di input, mentre il risultato restituito da applydipende dalla funzione passata.
sweep in azione:
# 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
Quindi, in sintesi, quello che sto cercando è un caso d'uso esemplare o due per sweep.
Per favore, non recitare o linkare alla documentazione di R, alle mailing list o ad alcuna delle fonti R "primarie" - presumi che le abbia lette. Quello che mi interessa è come i programmatori / analisti R esperti usano sweepnel proprio codice.
applyche posso capire per questo risultato è qualcosa del genere t(apply(t(M), 2, "-", dx)), ma è piuttosto sgradevole.