Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use the 'sweep' function

Tags:

r

statistics

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; its arguments are:

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 arguments are 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.

like image 858
doug Avatar asked Aug 09 '10 23:08

doug


People also ask

What does the sweep command do?

Creates a 3D solid or 3D surface by sweeping a 2D object or subobject along an open or closed path. Open-ended objects create 3D surfaces, while objects that enclose an area can be set to create either 3D solids or 3D surfaces.

What does sweep function do in R?

sweep() function in R Language is used to apply the operation “+ or -” to the row or column in data matrix. It is used to sweep the values from the data-framework.


1 Answers

sweep() is typically used when you operate a matrix by row or by column, and the other input of the operation is a different value for each row / column. Whether you operate by row or column is defined by MARGIN, as for apply(). The values used for what I called "the other input" is defined by STATS. So, for each row (or column), you will take a value from STATS and use in the operation defined by FUN.

For instance, if you want to add 1 to the 1st row, 2 to the 2nd, etc. of the matrix you defined, you will do:

sweep (M, 1, c(1: 4), "+") 

I frankly did not understand the definition in the R documentation either, I just learned by looking up examples.

like image 147
Daniele Merico Avatar answered Sep 21 '22 07:09

Daniele Merico