Kiedy patrzę na źródło pakietów R, widzę sweep
czę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ć sweep
efekt za pomocą prostszej funkcji, sugeruje, że nie rozumiem sweep
podstawowych przypadków użycia, a fakt, że ta funkcja jest używana tak często, sugeruje, że jest całkiem przydatna.
Kontekst:
sweep
jest 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ć sweep
wymaga jeszcze jednego parametru STATS
.
Inną kluczową różnicą jest to, że sweep
zwraca tablicę o tym samym kształcie co tablica wejściowa, podczas gdy wynik zwracany przez apply
zależ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ą sweep
swój własny kod.
apply
jakie mogę znaleźć dla tego wyniku, to coś w rodzaju t(apply(t(M), 2, "-", dx))
, ale to dość paskudne.