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

Mon Oct 22 22:07:40 CEST 2012

```Hello,

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,

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