【问题标题】:using separate matrices in a loop and saving the results in a data frame在循环中使用单独的矩阵并将结果保存在数据框中
【发布时间】:2016-10-25 17:31:41
【问题描述】:

我有一些矩阵,它们的行数和列数都相同,它们的名称也完全相同。例如,我是这样读的

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

现在我想得到 a & b, a & c,...,b & c, ..., c & d, d 之间的相似度指数 & e 使用此代码

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

我不知道如何在循环中使用这些单独的矩阵并保存这样的结果。有人帮我解决这个问题吗?

【问题讨论】:

    标签: r loops igraph


    【解决方案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,]))
    

    【讨论】:

    • 太棒了。非常感谢@Davide Passaretti
    猜你喜欢
    • 2014-01-09
    • 2018-06-17
    • 1970-01-01
    • 2021-03-22
    • 2018-11-09
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多