在R
我在寻找一个在R中找到CpG岛的算法。我还没有找到一个特别的,所以我决定自己做一个。所讨论的算法来自Gardiner garden和Frommer的一篇文章(任何谷歌搜索都可以找到这篇文章供阅读),主要规则如下:在R,r,algorithm,R,Algorithm,我在寻找一个在R中找到CpG岛的算法。我还没有找到一个特别的,所以我决定自己做一个。所讨论的算法来自Gardiner garden和Frommer的一篇文章(任何谷歌搜索都可以找到这篇文章供阅读),主要规则如下: CpG岛定义为至少200 bp的区域 “GC含量”或GC二核苷酸的比例大于50% 观察到的CpG比(O/E)大于0.6。这通过以下公式计算: Obs/Exp CpG=CpG数量*N/(C数量*G数量) N为所考虑片段中的核苷酸数 我对这个想法没有深入了解,因为我缺乏编程方面的知识,但我
a.
我们从基因组中的第一个CpG开始,然后将随后的CpG添加到
一个接一个地移动阵列(向前滑动右边缘)
b.
每次我们在右侧添加一个CpG时:
1b)
如果长度小于200,我们继续(在右侧添加另一个)。
否则,长度标准得到满足,我们将评估%GC和O/E
2b)
如果这三个标准都满足,我们会注意到我们假定的岛屿看起来不错,并继续前进(尝试建造一个更大的岛屿)。如果在我们添加此CpG之前满足所有三个标准,但现在不再满足%GC和O/E,我们将此CpG用作新假定孤岛的开始,并打印出上一次迭代中的孤岛
3b)
4b)
可以找到一个样本序列
我迄今为止的努力:
a=lapply(x, function(vec){
x <- gregexpr("gc", vec, perl = TRUE)
res <- sum(attr(x[[1]], "match.length"))
res
})
b=lapply(x, function(vec){
x <- gregexpr("g", vec, perl = TRUE)
res <- regmatches(vec, x)
res
})
c=lapply(x, function(vec){
x <- gregexpr("c", vec, perl = TRUE)
res <- regmatches(vec, x)
res
})
因此,更容易处理一个大序列
如果有人能帮忙,我将非常感激
编辑1:
在仔细查看之后,我发现上述算法步骤实际上是一种称为滑动窗口算法的算法。在这里,我在Stackoverflow上找到了许多R的滑动窗口算法示例。如果做了一些更改,这可能就是该算法的解决方案。代码如下:
slide_function <- function(data, window, step){
total <- length(data)
spots <- seq(from=1, to=(total-window), by=step)
result <- vector(length = length(spots))
for(i in 1:length(spots)){
result[i] <-
}
return(result)
}
slide\u函数
slide_function <- function(data, window, step){
total <- length(data)
spots <- seq(from=1, to=(total-window), by=step)
result <- vector(length = length(spots))
for(i in 1:length(spots)){
result[i] <-
}
return(result)
}