Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 寻找(L,t)-丛_Algorithm_Clojure_Bioinformatics - Fatal编程技术网

Algorithm 寻找(L,t)-丛

Algorithm 寻找(L,t)-丛,algorithm,clojure,bioinformatics,Algorithm,Clojure,Bioinformatics,我正试图在Clojure中找到丛。基本上,我需要找到所有出现在t次基因组中大小为L的窗口中的k长度子串。我已经实现了我认为解决方案是什么,但是我相信其中可能有缺陷,因为我用来确认的系统(beta.stepic.org)告诉我这一点。你们能看出我把事情搞砸了吗?我的解决方案如下,找到所有排名靠前的k-mers(k-length子串)并找到它们的起始索引。之后,我将其划分为t组,这意味着这是它们发生的次数,并且基本上对偏移量为k的已划分组中的最后一项和第一项进行了差异(因为所有k项都应适合于L窗口,

我正试图在Clojure中找到丛。基本上,我需要找到所有出现在t次基因组中大小为L的窗口中的k长度子串。我已经实现了我认为解决方案是什么,但是我相信其中可能有缺陷,因为我用来确认的系统(beta.stepic.org)告诉我这一点。你们能看出我把事情搞砸了吗?我的解决方案如下,找到所有排名靠前的k-mers(k-length子串)并找到它们的起始索引。之后,我将其划分为t组,这意味着这是它们发生的次数,并且基本上对偏移量为k的已划分组中的最后一项和第一项进行了差异(因为所有k项都应适合于L窗口,这将通过扩展它来解释最后一个k项)。指数按升序排列。臭虫在哪里

团块查找问题:查找在字符串中形成团块的模式。 样本输入

基因组:CGGACTCGACAGATGTGAAGAGAGACAGATGTGAAGCTCGACACAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG

样本输出

CGACA砷化镓

(defn获取索引[源目标]
“返回子字符串目标的索引
按升序在源中找到。这包括重叠。“
(让
[搜索(java.util.regex.Pattern/compile(str“(?=(“目标”))”)
匹配器(重新匹配器搜索源)
非零?(补零?)
(定义内部[匹配器]
(如果(不是零?(重新查找匹配者))
(cons(.start matcher)(内部匹配器)))
(内部匹配器)
(defn获得频繁kmer[来源k]
“从源获取大小为k的最频繁的k-mers”
(让[max val(val(应用max key val(频率(分区K1源))))]
(首先映射(过滤器#(=(val%)最大值)
(频率(map(部分应用str)(分区K1源()()()))))
(defn-find-clumps[基因组KLT]
(对于[k-mer(获取频繁的kmer基因组k)]
(让[索引(获取索引)k-mer)]

(如果(有些是真的)(map#)(除了代码样式有一些可以改进的地方外,我看到的主要问题是您在
max key val
上过滤k-mers,而在初始过滤上根本没有考虑
t

当您发现最常见的l-mers大小
k
时,您只需保留较长的l-mers:

  (apply max-key val (frequencies (partition k 1 source)))
因为你是按max val过滤的

  (filter #(= (val %) max-val)
你只是在分析这些:

  (for [k-mer (get-frequent-kmer genome k)]

问题是,如果
t
为4,但有一些5-mers的重复次数超过4次,则将这些重复次数保留在等式之外。

以下是一些工作代码:

(defn k-mers 
  "Returns a seq of all k-mers in text."
  [k text]
  (map #(apply str %) (partition k 1 text)))

(defn most-frequent-k-mers 
  "Returns a seq of k-mers in text appearing at least t times."
  [k t text]
  (->> (k-mers k text)
       (frequencies)
       (filter #(<= t (second %)))
       (map first)))

(defn find-clump
  "Finds k-mers forming (L, t) clumps in text."
  [k L t text]
  (let [windows (partition L 1 text)]
    (->> windows 
         (map #(most-frequent-k-mers k t %))
         (map set)
         (apply clojure.set/union))))
(定义k-mers)
“返回文本中所有k-MER的序号。”
[正文]
(映射#(应用str%)(分区K1文本)))
(定义最频繁的k-mers)
“返回文本中出现至少t次的k-mers序列。”
[k t文本]
(->>(k-k文本)
(频率)
(过滤器#)(>窗口
(map#(最常见的k-mers k-t%))
(地图集)
(应用clojure.set/union)))

我想你应该从这里开始。

“我需要找到在基因组中大小为L的窗口中出现t次的所有k长度子串”还不清楚——你的意思是“我需要找到在基因组中大小为L的窗口中至少出现t次的所有k长度子串”?根据您用来检查的系统,您期望的正确输出是什么?代码中有两个方面可以改进(例如在
defn
中删除
defn
)但是这些都不会改变你函数的行为。只有在发布这些信息并离开计算机后,我才意识到这一点。谢谢你确认我的信念。
  (filter #(= (val %) max-val)
  (for [k-mer (get-frequent-kmer genome k)]
(defn k-mers 
  "Returns a seq of all k-mers in text."
  [k text]
  (map #(apply str %) (partition k 1 text)))

(defn most-frequent-k-mers 
  "Returns a seq of k-mers in text appearing at least t times."
  [k t text]
  (->> (k-mers k text)
       (frequencies)
       (filter #(<= t (second %)))
       (map first)))

(defn find-clump
  "Finds k-mers forming (L, t) clumps in text."
  [k L t text]
  (let [windows (partition L 1 text)]
    (->> windows 
         (map #(most-frequent-k-mers k t %))
         (map set)
         (apply clojure.set/union))))