tags:

views:

146

answers:

1

When i look at the source of R Packages, i see the function sweep used quite often. Sometimes it's used when a simpler function would have sufficed (e.g., 'apply'), other times, it's impossible to know exactly what it's is doing without spending a fair amount of time to step through the code block it's in.

the fact that i can reproduce sweep's effect using a simpler function suggests that i don't understand sweep's core use cases, and the fact that this function is used so often suggests that it's quite useful.

The context:

sweep is a function in R's standard library; it's method signature is:

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

As you can see, the method signature is similar to 'apply' though 'sweep' requires one more parameter, 'STATS'.

Another key difference is that 'sweep' returns an array of the same shape as the input array, whereas the result returned by 'apply' depends on the function passed in.

Sweep in action:

# 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

So in sum, what i'm looking for is an exemplary use case or two for sweep.

Please, do not recite or link to the R Documentation, mailing lists, or any of the 'primary' R sources--assume i've read them. What i'm interested in is how experienced R programmers/analysts use sweep in their own code.

+3  A: 

One thing I sometimes find useful is a simple Google Code query setting a term (sweep) and the programming language (R) though this example gives you the function itself first.

Dirk Eddelbuettel
It's hard to admit that I am still learning how to google after all these years, but anyway: thx Dirk!
ran2