2016-10-25 8 views
0

У меня есть несколько матриц, что все они одинаковы по количеству строк и столбцов, а их размеры одинаковы. Я читал их, как это, напримерс использованием отдельных матриц в цикле и сохранения результатов в кадре данных

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

Теперь я хочу, чтобы получить индекс сходства между & Ь, а & с, ..., б & с, ..., с & д, д & е При использовании этого кода

library(igraph) 
library(BiRewire) 

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

Тогда я хочу, чтобы сохранить результат в виде фрейма данных, как это, например,

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

Я не знаю, как я могу использовать эти отдельные матрицы в цикле и сохранять результат таким образом. Кто-нибудь поможет мне в решении этой проблемы?

ответ

1

Подготовьте функцию для вычисления попарных сходства

myfun <- function(x, y) { 

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

} 

Построить возможные комбинации (вы сказали, что ваши матрицы названы первые 5 букв алфавита, но вы можете поместить любые имена вместо letters[1:5]):

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

Построить dataframe связывания колонки комбинации и результаты функции, которая применяется к такой комбинации:

data.frame(t(myletters), 
      simil.index = mapply(myfun, myletters[1,], myletters[2,])) 
+0

Это было здорово. На самом деле спасибо @Davide Passaretti – minoo