minoo - 1 year ago 58
R Question

# using separate matrices in a loop and saving the results in a data frame

I have a few matrices that all of them are the same in number of rows and columns and dimanames of them are exactly the same too. I read them like this for example

``````a<-read.csv("a.txt",row.names = 1,header=T,sep="\t")
``````

Now I want to get similarity index between a & b, a & c,...,b & c, ..., c & d, d
& e using this code

``````library(igraph)
library(BiRewire)

jaccard.index<-birewire.similarity( a,b)
``````

Then I want to save the result as a data frame like this for example

``````mat1    mat2    simil.index
a   b   0.9142
a   c   0.8126
a   d   0.5066
b   e   0.9526
``````

I don't know how can I use these separate matrices in a loop and saving the result like that. Anyone help me on this problem?

Prepare the function to compute pairwise similarities

``````myfun <- function(x, y) {

birewire.similarity(eval(parse(text = x)), eval(parse(text = y)))

}
``````

Build the possible combinations (you said your matrices are named as the first 5 letters of the alphabet, but you can put any names in place of `letters[1:5]`):

``````myletters <- combn(letters[1:5], 2)
``````

Build the dataframe binding by column the combinations and the results of the function that is applied to such combinations:

``````data.frame(t(myletters),
simil.index = mapply(myfun, myletters[1,], myletters[2,]))
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download