Jim

I tried that and it works. Thank you very much for your help!

Regards

Pietro


-----Original Message-----
From: jim holtman [mailto:jholt...@gmail.com] 
Sent: 04 November 2011 13:38
To: Parodi, Pietro
Cc: r-help@r-project.org
Subject: Re: [R] Counting number of common elements between the rows of two 
different matrices

Try this:

# create dummy data
a <- matrix(sample(20, 50, TRUE), ncol = 5)
b <- matrix(sample(20, 50, TRUE), ncol = 5)
# create combinations to test
x <- expand.grid(seq(nrow(a)), seq(nrow(b)))
# test
result <- mapply(function(m1, m2) any(a[m1, ] %in% b[m2, ])
            , x[, 1]
            , x[, 2]
            )
# create the output matrix
result.m <- matrix(result, nrow = nrow(a), ncol = nrow(b))

On Fri, Nov 4, 2011 at 8:51 AM, Parodi, Pietro <pietro.par...@willis.com> wrote:
>
> Hello
>
> I'm trying to solve this problem without using a for loop but I have so
> far failed to find a solution.
>
> I have two matrices of K columns each, e.g. (K=5), and with numbers of
> row N_A and N_B respectively
>
> A =     (1 5 3 8 15;
>         2 7 20 11 13;
>         12 19 20 21 43)
>
> B =     (2 6 30 8 16;
>         3 8 19 11 13)
>
> (the actual matrices have hundreds of thousands of entry, that's why I'm
> keen to avoid "for" loops)
>
> And what I need to do is to apply a function which counts the number of
> common elements between ANY row of A and ANY row of B, giving a result
> like this:
>
>
> A1 vs B1:  1  # (8 is a common element)
> A1 vs B2:  1  # (8 is a common element)
> A2 vs B1:  1  # (2 is a common element)
> A2 vs B2:  1  # 11, 13 are common elements
> Etc.
>
> I've built a function that counts the number of common elements between
> two vectors, based on the intersect function in the R manual
>
> common_elements <- function(x,y) length(y[match(x,y,nomatch=0)])
>
> And a double loop who solves my problem would be something like
> (pseudo-code)
>
> For(i in 1:N_A){
>        for(j in 1:N_B){
>                ce(i,j)=common_elements(a(i),b(j))
>                }
>        }
>
> Is there an efficient, clean way to do the same job and give as an
> output a matrix N_A x N_B such as that above?
>
> Thanks a lot for your help
>
> Regards
>
> Pietro
>
> ______________________________________________________________________
>
> For information pertaining to Willis' email confidentiality and monitoring 
> policy, usage restrictions, or for specific company registration and 
> regulatory status information, please visit 
> http://www.willis.com/email_trailer.aspx
>
> We are now able to offer our clients an encrypted email capability for secure 
> communication purposes. If you wish to take advantage of this service or 
> learn more about it, please let me know or contact your Client Advocate for 
> full details. ~W67897
>
> ______________________________________________
> R-help@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.
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
R-help@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.

Reply via email to