Kiedy patrzę na źródło pakietów R, widzę sweepczęsto używaną funkcję . Czasami jest używany, gdy prostsza funkcja wystarczyłaby (np. apply), Innym razem nie można dokładnie wiedzieć, co robi, bez poświęcania dużej ilości czasu na przejście przez blok kodu, w którym się znajduje.
Fakt, że mogę odtworzyć sweepefekt za pomocą prostszej funkcji, sugeruje, że nie rozumiem sweeppodstawowych przypadków użycia, a fakt, że ta funkcja jest używana tak często, sugeruje, że jest całkiem przydatna.
Kontekst:
sweepjest funkcją w standardowej bibliotece języka R; jej argumenty to:
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
Jak widać, argumenty są podobne apply, choć sweepwymaga jeszcze jednego parametru STATS.
Inną kluczową różnicą jest to, że sweepzwraca tablicę o tym samym kształcie co tablica wejściowa, podczas gdy wynik zwracany przez applyzależy od przekazanej funkcji.
sweep w akcji:
# 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
Podsumowując, szukam przykładowego przypadku użycia lub dwóch dla sweep.
Prosimy nie recytować ani nie łączyć się z dokumentacją R, listami mailingowymi ani żadnym z „głównych” źródeł języka R - załóżmy, że je przeczytałem. Interesuje mnie sposób, w jaki doświadczeni programiści / analitycy języka R wykorzystują sweepswój własny kod.
applyjakie mogę znaleźć dla tego wyniku, to coś w rodzaju t(apply(t(M), 2, "-", dx)), ale to dość paskudne.