Wenn ich mir die Quelle von R-Paketen ansehe, sehe ich die sweep
häufig verwendete Funktion . Manchmal wird es verwendet, wenn eine einfachere Funktion ausgereicht hätte (z. B. apply
), manchmal ist es unmöglich, genau zu wissen, was es tut, ohne eine angemessene Zeit damit zu verbringen, den Codeblock zu durchlaufen, in dem es sich befindet.
Die Tatsache, dass ich den sweep
Effekt mit einer einfacheren Funktion reproduzieren kann , deutet darauf hin , dass ich die wichtigsten Anwendungsfälle nicht verstehe sweep
, und die Tatsache, dass diese Funktion so oft verwendet wird, legt nahe, dass sie sehr nützlich ist.
Der Kontext:
sweep
ist eine Funktion in der Standardbibliothek von R; seine Argumente sind:
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
Wie Sie sehen können, sind die Argumente , ähnlich wie apply
wenn sweep
man erfordert mehr Parameter STATS
.
Ein weiterer wesentlicher Unterschied besteht darin, dass sweep
ein Array mit derselben Form wie das Eingabearray zurückgegeben wird, während das von zurückgegebene Ergebnis von apply
der übergebenen Funktion abhängt.
sweep
in Aktion:
# 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
Alles in allem suche ich also ein oder zwei beispielhafte Anwendungsfälle für sweep
.
Bitte rezitieren oder verlinken Sie nicht auf die R-Dokumentation, Mailinglisten oder eine der 'primären' R-Quellen - vorausgesetzt, ich habe sie gelesen. Mich interessiert, wie erfahrene R-Programmierer / Analysten sweep
ihren eigenen Code verwenden.
apply
, die ich für dieses Ergebnis herausfinden kann, ist so etwas wie t(apply(t(M), 2, "-", dx))
, aber das ist ziemlich böse.