在循环中使用单独的矩阵并将结果保存在数据框中

时间:2016-10-25 08:23:33

标签: r loops igraph

我有一些矩阵,它们的行数和列数都相同,而且它们的二进制数也完全相同。我这样读了它们,例如

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")

现在我希望得到一个&amp; amp; b,a&amp; c,...,b&amp; c,...,c&amp; d,d &安培;使用此代码

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 个答案:

答案 0 :(得分: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)

按列构建数据框绑定组合以及应用于此类组合的函数的结果:

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