如何使用重叠矩阵/交叉函数找出多个基因集之间的重叠

时间:2018-11-23 14:28:27

标签: r rstudio bioinformatics

我有八个不同的.txt文件,其中包含一长串的基因名称。我想在RStudio上编写某种代码,以查看它们之间的重叠。 有谁知道哪个功能会有所帮助?我尝试使用intersect()函数,但收集到它仅在比较两个向量时有效。

任何帮助将不胜感激。 enter image description here

Screenshot of the current code

有人知道为什么仍然出现错误消息的任何线索吗?

1 个答案:

答案 0 :(得分:0)

您首先需要将列表作为矢量加载。假设文件的每一行都包含一个基因ID:

genevect1 <- scan("file1.txt", what=character(), sep="\n")
genevect2 <- scan("file2.txt", what=character(), sep="\n")

然后您可以:

inter1vs2 <- intersect(genevect1, genevect2)

如果要与下一个基因载体相交:

inter1vs2vs3 <- intersect(inter1vs2, genevect3)

[编辑]

要遍历文件:

filelist <- list(data.file1, data.file2, data.file3, etc)  # CHANGE "etc"
# "Lapply" is basically making a "for loop".
all_gene_vectors <- lapply(filelist, scan, what=character(), sep="\n")

# Then make the intersection of *all* genesets (if that's what you want).
final_inter <- all_gene_vectors[[1]]
for (next_genevect in all_gene_vectors[2:length(all_gene_vectors)]) {
    final_inter <- intersect(final_inter, next_genevect)
}

# Or compute all pairwise intersections (untested)
pairwise_inters <- list()
# Iterate over all possible pairs i,j (i ≠ j)
N <- length(all_gene_vectors)
for (i in 1:(N-1)) {
    ith_inters <- list()
    for (j in (i+1):N) {
        ith_inters[[ names(all_gene_vectors)[j] ]] <- intersect(all_gene_vectors[[i]], all_gene_vectors[[j]])
    }
    pairwise_inters[[ names(all_gene_vectors)[i] ]] <- ith_inters
}

PS

我使用了scan函数来读取数据,因为这是一种简单的从文件中读取行的通用方法。如果您喜欢并且适合您的数据,则可以使用read.table

genedata1 <- read.table("file1.txt", header=FALSE, row.names=NULL, quote="", as.is=TRUE)

,然后使用genedata$V1访问“向量”对象(一列)。