使用R中的向量的常见字符特征矩阵

时间:2015-01-12 08:05:46

标签: r string

我正在使用R语言。

我有大约9个载体,每个载体是一个含有4到3900个基因名称的字符载体。我基本上想看看这些载体共有多少个基因。例如,

geneList1=c("gene1","gene2","gene6","gene28")
geneList2=c("gene2","gene4","gene1")

通过使用%in%运算符,我可以检查两个向量的共同特征:

geneList2 %in% geneList1
## [1]  TRUE FALSE  TRUE

由于我有相对较大的载体,理想情况下我想看看共同基因的比例,即

mean(geneList2 %in% geneList1)
## [1] 0.6666667

因此,两个向量相对容易,但9个向量怎么样?必须有比将每个向量与所有其他向量进行比较更好的方法。理想情况下,我想要一些“共同矩阵中的特征”,对角线上有1个(每个向量具有与其自身共有的所有特征),并且在非对角线上具有不同向量之间共同的特征。类似的东西:

          geneList1 geneList2
geneList1 1.0000000       0.5
geneList2 0.6666667       1.0

但对于多个载体。

2 个答案:

答案 0 :(得分:1)

使用apply函数可能有许多更快的方法,但是嵌套for循环的旧学校也可以做到这一点。

首先列出所有单独的genList,然后在它们上面循环两次。

genList1 <- as.character(sample(x = 1:10, size=1))
genList2 <- as.character(sample(x = 1:10, size=2))
genList3 <- as.character(sample(x = 1:10, size=3))
genList4 <- as.character(sample(x = 1:10, size=4))
genList5 <- as.character(sample(x = 1:10, size=10))
genList6 <- as.character(sample(x = 1:10, size=6))
genList7 <- as.character(sample(x = 1:10, size=7))
genList8 <- as.character(sample(x = 1:10, size=8))
genList9 <- as.character(sample(x = 1:10, size=1))

genlist <- list(genList1,geneList2,genList3,genList4,genList5,genList6,genList7,
                                    genList8,genList9)

N <- length(genelist)

commom_matrix <- matrix(0, ncol=N, nrow=N)
for(i in 1:length(genelist)){
    for(j in 1:length(genlist)){
         commom_matrix[i,j] <- mean(genlist[[i]] %in% genlist[[j]])
    }
}

答案 1 :(得分:1)

最大的问题(我认为)是你的向量不是相同的长度,因此你不能把它们保持在任何其他形式而不是列表中。因此,第一步是使用mgetls组合将它们从您的全局环境转换为列表对象,然后将它们与所有

进行比较
l <- mget(ls(pattern = "geneList\\d+"))
sapply(l, function(x) lapply(l, function(y) mean(y %in% x)))
#           geneList1 geneList2
# geneList1 1         0.5      
# geneList2 0.6666667 1