[R] Help with applying a function to all possible 2x2 submatrices

Rui Barradas ruipbarradas at sapo.pt
Mon Oct 22 22:07:40 CEST 2012


If your matrix is in the order of 300x300, the problem of extracting all 
possible submatrices and applying a function will allways be a large 
one, but the use of ?combn may reduce it a bit if the order of 
rows/columns in the submatrices doesn't matter. It can reduce it from 
300^4 = 8.1e+09 to 2.0e+09 submatrices, a factor of 4.
See the example below.

# Make up some data.
nr <- nc <- 10
x <- matrix(rnorm(nr*nc), nrow = nr)

cr <- combn(nr, 2)
cc <- combn(nc, 2)

fun <- function(rr, cc, xx, FUN) FUN(xx[rr, cc])

apply(cr, 2, function(i)
     apply(cc, 2, function(j)
         fun(cr[, i], cc[, j], x, sum)

Note that this hides away the quartic nature of the algorithm.

Hope this helps,

Rui Barradas
Em 22-10-2012 18:10, CMB123 escreveu:
> Hi all,
> I'm working with a large data set (on the order of 300X300) and trying to
> apply a function which compares the elements of all possible 2x2
> submatrices. There are rc(r-1)(c-1) such submatrices, so obviously the naive
> method of looping through the rows and columns is computationally unfeasible
> for my data set:
>    for(i in 1:(nrow(data)-1)) {
>      for(j in (i+1):nrow(data)) {
>        for (m in 1:(ncol(data)-1)) {
>          for (n in (m+1):ncol(data)) {
> I have tried using the outer and apply functions to vectorize the task, but
> I can't seem to figure out the best method (or any method, for that matter)
> to help with what I'm trying to do.
> Any and all help is much appreciated! Thanks in advance,
> C
> --
> View this message in context: http://r.789695.n4.nabble.com/Help-with-applying-a-function-to-all-possible-2x2-submatrices-tp4647048.html
> Sent from the R help mailing list archive at Nabble.com.
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list