首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数在迭代字符串时返回Map列表,kmer计数

函数在迭代字符串时返回Map列表,kmer计数
EN

Stack Overflow用户
提问于 2014-10-05 17:40:07
回答 1查看 419关注 0票数 4

我正在创建一个k-mer频率计数器(类似于Hadoop中的单词计数),它是用Scala编写的。我对Scala相当陌生,但我有一些编程经验。

输入是一个包含基因序列的文本文件,我的任务是获取每个k-mer的频率,其中k是该序列的指定长度。

因此,序列AGCTTTC有三种5-mers (AGCTT,GCTTT,CTTTC)。

我已经对输入进行了分析,并创建了一个巨大的字符串,这是整个序列,新的行抛出k-mer计数,因为一行序列的末尾仍然应该与下一行序列的开头形成k-mer。

现在,我正在尝试编写一个函数,该函数将生成一个映射列表( List[Map[String, Int]] ),使用scala的groupBy函数可以很容易地获得普通k-mers的计数。

代码语言:javascript
运行
AI代码解释
复制
import scala.io.Source

object Main {
  def main(args: Array[String]) {

    // Get all of the lines from the input file
    val input = Source.fromFile("input.txt").getLines.toArray

    // Create one huge string which contains all the lines but the first
    val lines = input.tail.mkString.replace("\n","")

    val mappedKmers: List[Map[String,Int]] = getMappedKmers(5, lines)

  }

  def getMappedKmers(k: Int, seq: String): List[Map[String, Int]] = {
    for (i <- 0 until seq.length - k) {
      Map(seq.substring(i, i+k), 1) // Map the k-mer to a count of 1
    }
  }
}

几个问题:

  • 如何创建/生成List[Map[String,Int]]
  • 你会怎么做?

任何帮助和/或建议都是绝对感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-05 18:16:20

您已经非常接近了--您的代码有三个相当小的问题。

首先,for (i <- whatever) foo(i)whatever.foreach(i => foo(i))的语法糖,这意味着您实际上没有对whatever的内容做任何事情。您需要的是for (i <- whatever) yield foo(i),它是whatever.map(i => foo(i))的糖,并返回转换后的集合。

第二个问题是,0 until seq.length - k是一个Range,而不是一个List,所以即使添加了yield,结果仍然不会与声明的返回类型一致。

第三个问题是Map(k, v)试图用两个键值对( kv )创建一个映射。您需要Map(k -> v)Map((k, v)),其中任何一个都明确说明您有一个参数对。

因此,以下几点应能奏效:

代码语言:javascript
运行
AI代码解释
复制
def getMappedKmers(k: Int, seq: String): IndexedSeq[Map[String, Int]] = {
  for (i <- 0 until seq.length - k) yield {
    Map(seq.substring(i, i + k) -> 1) // Map the k-mer to a count of 1
  }
}

您还可以将范围或整个结果转换为带有.toList的列表,如果您希望在末尾列出一个列表的话。

顺便说一句,值得一提的是,sliding方法在Seq上做的正是您想做的事情:

代码语言:javascript
运行
AI代码解释
复制
scala> "AGCTTTC".sliding(5).foreach(println)
AGCTT
GCTTT
CTTTC

对于真正的代码,我肯定会推荐类似"AGCTTTC".sliding(5).toList.groupBy(identity)的东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26209027

复制
相关文章
Go map迭代时乱序的原因分析
在Go语言的runtime包中,mapiterinit函数是用于初始化map的遍历迭代器的。它的作用是为map的遍历提供必要的初始化操作。
fliter
2023/06/18
4540
Go map迭代时乱序的原因分析
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
2.3K0
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
Python用map函数解决Serise列表到字符串的转换
这些技巧虽然看着很简单很简单,但是也得加深印象啊,挺实用的,小白和大家一起学习加油!
全栈程序员站长
2022/06/28
1.7K0
Python用map函数解决Serise列表到字符串的转换
R tips:使用enframe和map2优雅的迭代列表
在R中更易于处理的数据形式是data.frame,list并不是太好处理,常用操作就是对它进行循环迭代。
生信菜鸟团
2020/06/02
2.1K0
SpringMVC XStream 返回Xml时完美支持List,Map输出 顶
现支持,多种容器组合,无限循环嵌套,基本数据类型为null,则设置默认值,日期格式化。
linapex
2019/03/26
2.6K0
SpringMVC XStream 返回Xml时完美支持List,Map输出
                                                    顶
【说站】splitlines在python中返回列表
2、返回一个是否包含换行符的列表,如果参数keepends为False,则不包含换行符。
很酷的站长
2022/11/23
3.3K0
Golang 函数返回类型是接口时返回对象的指针还是值
Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。
恋喵大鲤鱼
2019/06/14
9K0
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。
全栈程序员站长
2022/07/07
1.9K0
LeetCode 554. 砖墙(map计数)
你的面前有一堵方形的、由多行砖块组成的砖墙。 这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。
Michael阿明
2020/07/13
4050
SMURF流程之q2-sidle(二)-- 序列重建
继续前面的文档学习,地址在这里啦!官方文档‎ SMURF 算法的核心是基于基于 kmer 的短区域重建到全长框架中。有两个步骤,首先是ASV在单个区域基于kmer进行比对,然后完整的序列集组装成重建的计数表。
用户1075469
2021/03/11
4900
SMURF流程之q2-sidle(二)-- 序列重建
C语言函数执行成功时,返回1和返回0,究竟哪个好?
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的输入,常常产生不同的输出结果。
诸葛青云
2019/10/29
3.1K0
C语言函数执行成功时,返回1和返回0,究竟哪个好?
比较Python中的列表推导式和map(),filter()函数
对一个列表(迭代器)中的元素进行批量处理是一个很常见的业务需求,在 Python 中,一般有三种解决方案:for循环,列表推导式,或者map(),filter()函数。
杜逸先
2023/04/13
2.2K0
比较Python中的列表推导式和map(),filter()函数
Map映射如何使用迭代器?
迭代器只针对集合类型的数据,因此map类型的必须先转换成集合类型才能使用迭代器去获取元素。
孙晨c
2019/11/21
1.4K0
LeetCode 1711. 大餐计数(map计数 + 二分查找)
给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i​​​​​​​​​​​​​​ 道餐品的美味程度,返回你可以用数组中的餐品做出的不同 大餐 的数量。 结果需要对 10^9 + 7 取余。
Michael阿明
2021/02/19
4550
计数函数|count函数家族
今天要跟大家分享的是一组计数函数——count函数家族! excel中以计数功能为主的count函数主要有以下五个: count counta countblank countif countif
数据小磨坊
2018/04/10
1.1K0
计数函数|count函数家族
MyBatis在insert插入对象时,返回自增主键
useGeneratedKeys="true"(默认是false) keyProperty="id" 3: keyProperty 这个设置的是 你传入对象的属性名,不是你数据表的字段
星辰sea
2022/10/29
2.4K1
MyBatis在insert插入对象时,返回自增主键
JAVA给定字符串数组返回数组各值(Map按照Key排序)
public static Map<String, Integer>publicMap = new LinkedHashMap<String,Integer>();
用户2192970
2019/02/22
1.6K0
在java中,怎样把一个double数转换为字符串时,不用科学计数法表示。
解决方法1: 对Double类型的数字进行 格式化输出 ,相对来说不是很精确 import java.text.DecimalFormat; public class TestDouble_String { public static void main(String[] args) { Double double1 = 123456789.123456789; DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");/
程思扬
2022/01/10
1.9K0
Python 字符串中返回bool类型的函数集合
字符串中返回bool类型的函数集合 isspace 功能: 判断字符串是否是由一个空格组成的字符串 用法: booltype = string.isspace() -> 无参数可传 ,返回一个布尔类型 注意: 由空格组成的字符串,不是空字符串 : “’!=‘’’ istitile 功能: 判断字符串是否是一个标题类型 用法 booltype = String.istitle() -> 无参数可传, 返回一个布尔类型 注意: 该函数只能用于英文 isupper与islower 功能: isupper判断字
Zkeq
2022/05/18
3K0
mybatis 查询返回List集合、map集合、List<Map>集合[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.5K1

相似问题

Map函数是否在迭代列表中返回值?Scala

27

使用Perl进行Kmer计数

32

如何在SASS中迭代列表时使用map函数?

14

从map返回迭代器的函数

20

std:map迭代器在查找时返回badptr

20
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档