【发布时间】:2019-02-28 08:58:41
【问题描述】:
在比较不同的GRange 对象时,我试图找到一种方法来有效地提取显示“0”或“1”的矩阵。在我的例子中:
df <- data.frame(chr = c("chr1", "chr10"), start = c(1,4), end=c(2, 4))
gr.1 <- makeGRangesFromDataFrame(df)
df <- data.frame(chr = c("chr1", "chr10"), start = c(2,3), end=c(2, 4))
gr.2 <- makeGRangesFromDataFrame(df)
df <- data.frame(chr = c("chr1"), start = c(1), end=c(1))
gr.3 <- makeGRangesFromDataFrame(df)
我尝试findOverlaps 来评估这些区域之间的重叠,但显然它不能处理两个以上的GRanges:
> GenomicRanges::findOverlaps(gr.1, gr.2, gr.3)
> Error in IRanges:::NCList_find_overlaps_in_groups(ranges(query),
> q_space, : 'maxgap' must be a single integer
此外,我需要的输出类似于此示例数据框:
out <- "gr.1 gr.2 gr.3
chr1-1 1 0 1
chr1-2 1 1 0
chr10-3 0 1 0
chr10-4 1 1 0"
out <- read.table(text=out, header=TRUE)
有什么明智地导出它的想法吗?
【问题讨论】:
-
你能提供更多的最小样本数据吗(真的有必要拥有 3 个
GRanges每个包含 1000 个特征)吗?此外,regionR::createRandomRegions具有进一步的依赖关系,这使得生成样本数据变得不必要地尴尬。如果您要提供较小的样本数据(包括匹配的预期输出),这将有很大帮助。为了解决您的问题,这本质上是一个多数据集合并,其解决方案通常非常简单,例如使用Reduce(findOverlaps, list_of_gr)并处理生成的对象。 -
事实上,
regionR::createRandomRegions是我发现的代表一组随机基因组范围的最简单方法。这是一个相当新的功能,适合我的例子。此外,我不确定生成随机基因组区域是否直接(参见biostars.org/p/225520)。最后,我正在模拟 1000 个基因组区域以增加变化,以使一些复杂的重叠模式作为我的真实数据集。另外,Reduce(findOverlaps, glg)只是给了我一个错误。 -
我强烈建议手动生成
GRanges的最小集合;我几乎可以保证,对于像你提供的那样笨重的样本数据,你将得到非常少的(积极的)回应。如果您手动生成数据,您还可以确保范围重叠;无需生成那么多范围!正如我所解释的,如果无法访问最少的样本数据,就很难(不可能)提供适当和具体的帮助;使用Reduce绝对是一种选择,但要使其发挥作用,我们需要数据。 -
[更新] 请记住,您要求这里的其他人利用他们的空闲时间来帮助您解决您的问题。第一条规则是:让我们尽可能轻松地为您提供帮助。
-
我明白你的意思,并且无意冒犯那些在 stackoverflow 上花时间帮助他人的人。希望我的更新现在更容易消化。
标签: r bioinformatics bioconductor