Quando guardo l'origine di R Packages, vedo la funzione sweep
usata 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 sweep
l'effetto di usando una funzione più semplice suggerisce che non capisco sweep
i 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 apply
se sweep
richiede un altro parametro, STATS
.
Un'altra differenza fondamentale è che sweep
restituisce un array della stessa forma dell'array di input, mentre il risultato restituito da apply
dipende 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 sweep
nel proprio codice.
apply
che posso capire per questo risultato è qualcosa del genere t(apply(t(M), 2, "-", dx))
, ma è piuttosto sgradevole.