你可以帮我解决下面的问题。非常感谢。
写一个clojure程序。给定整数L和t,字符串Pattern在(较大的)字符串内形成(L,t)-clump文本,如果存在长度为L的Text的连续子字符串,其中Pattern至少出现t次。例如,TGCA在以下文本中形成(25,3) - 团块:gatcagcataagggtcccTGCAATGCATGACAAGCCTGCAgttgttttac。编写一个函数findclumps,其中包含四个参数Text,k(整数),L(整数),t(整数),它返回长度为k的序列字符串,形成Text中的(L,t)-clump。例如:( def text“CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACAC GACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC”)(find-clumps text 5 75 4)返回(“CGACA”“GAAGA”“AATGT”)
(defn k-mers
[k text]
(map #(apply str %) (partition k 1 text)))
(defn most-frequent-k-mers
[k t text]
(->> (k-mers k text)
(frequencies)
(filter #(<= t (second %))) (map first)))
(defn find-clump
[k L t text]
(let [windows (partition L 1 text)]
(->> windows
(map #(most-frequent-k-mers k t %))
(map set) (apply clojure.set/union))))
答案 0 :(得分:0)
试试这个:
(defn find-clumps
[text k l t]
(map #(apply str (first %))
(into #{}
(filter #(= (second %)
t)
(mapcat #(frequencies (partition k 1 %))
(partition l 1 text))))))
:)