# Re: [R] Comparing two matrices

From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>
Date: Thu 06 Jul 2006 - 22:37:05 EST

Srinivas Iyyer <srini_iyyer_bio@yahoo.com> writes:

> hi:
>
> I have matrix with dimensions(200 X 20,000). I have
> another file, a tab-delim file where first column
> variables are row names and second column variables
> are column names.
>
>
> For instance:
>
> > tmat
> Apple Orange Mango Grape Star
> A 0 0 0 0 0
> O 0 0 0 0 0
> M 0 0 0 0 0
> G 0 0 0 0 0
> S 0 0 0 0 0
>
>
>
> > tb # tab- delim file.
> V1 V2
> 1 Apple S
> 2 Apple A
> 3 Apple O
> 4 Orange A
> 5 Orange O
> 6 Orange S
> 7 Mango M
> 8 Mango A
> 9 Mango S
>
>
> I have to read each line of the 'tb' (tab delim file),
> take the first variable, check if matches any rowname
> of the matrix. Take the second variable of the row in
> and check if it matches any column name. If so, put
> 1 else leave it.
>
>
> The following is a small piece of code that, I felt is
> a solutions. However, since my original matrix and
> tab-delim file is very very huge, I am not sure if it
> is really doing the correct thing. Could any one
>
>
>
> > for(i in 1:length(tb[,1])){
> + r = tb[i,1]
> + c = as.character(tb[i,2])
> + tmat[rownames(tmat)==c,colnames(tmat)==r] <-1
> + }

There are much faster ways. Try (untested)

```n1 <- match(tb\$V1, rownames(tmat))
n2 <- match(tb\$V2, colnames(tmat))
m <- unique(cbind(n1,n2)[complete.cases(n1,n2),])
```
tmat[m] <- 1

The unique() part may or may not be beneficial.

```--
O__  ---- Peter Dalgaard             ุster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)                  FAX: (+45) 35327907

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help