使用 R 分割字符串和计算字符的更快方法?

2024-02-27

我正在寻找一种更快的方法来计算从 FASTA 文件读取的 DNA 字符串的 GC 含量。这归结为获取一个字符串并计算字母“G”或“C”出现的次数。我还想指定要考虑的字符范围。

我有一个工作函数相当慢,它导致我的代码出现瓶颈。它看起来像这样:

##
## count the number of GCs in the characters between start and stop
##
gcCount <-  function(line, st, sp){
  chars = strsplit(as.character(line),"")[[1]]
  numGC = 0
  for(j in st:sp){
    ##nested ifs faster than an OR (|) construction
    if(chars[[j]] == "g"){
      numGC <- numGC + 1
    }else if(chars[[j]] == "G"){
      numGC <- numGC + 1
    }else if(chars[[j]] == "c"){
      numGC <- numGC + 1
    }else if(chars[[j]] == "C"){
      numGC <- numGC + 1
    }
  }
  return(numGC)
}

运行 Rprof 给出以下输出:

> a = "GCCCAAAATTTTCCGGatttaagcagacataaattcgagg"
> Rprof(filename="Rprof.out")
> for(i in 1:500000){gcCount(a,1,40)};
> Rprof(NULL)
> summaryRprof(filename="Rprof.out")

                   self.time self.pct total.time total.pct
"gcCount"          77.36     76.8     100.74     100.0
"=="               18.30     18.2      18.30      18.2
"strsplit"          3.58      3.6       3.64       3.6
"+"                 1.14      1.1       1.14       1.1
":"                 0.30      0.3       0.30       0.3
"as.logical"        0.04      0.0       0.04       0.0
"as.character"      0.02      0.0       0.02       0.0

$by.total
               total.time total.pct self.time self.pct
"gcCount"          100.74     100.0     77.36     76.8
"=="                18.30      18.2     18.30     18.2
"strsplit"           3.64       3.6      3.58      3.6
"+"                  1.14       1.1      1.14      1.1
":"                  0.30       0.3      0.30      0.3
"as.logical"         0.04       0.0      0.04      0.0
"as.character"       0.02       0.0      0.02      0.0

$sampling.time
[1] 100.74

有什么建议可以让这段代码更快吗?


最好根本不拆分,只计算匹配数:

gcCount2 <-  function(line, st, sp){
  sum(gregexpr('[GCgc]', substr(line, st, sp))[[1]] > 0)
}

这快了一个数量级。

一个仅迭代字符的小型 C 函数将会快一个数量级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 R 分割字符串和计算字符的更快方法? 的相关文章

随机推荐

  • GPGPU:普通 PC 陷入困境的后果

    我在一本书中读到 在波前或扭曲中 所有线程共享一个公共程序计数器 那么它的后果是什么呢 为什么这很重要 NVIDIA GPU 一次执行 32 个线程 扭曲 AMD GPU 一次执行 64 个线程 波前 控制逻辑 读取和数据路径的共享减少了面
  • AzurePS 系统功能在新安装的 vsts-agent 上不可用

    我已在新的 Azure VM Windows Server 2012 R2 64 位 上成功安装新的 VSTS 代理 当我尝试在新的 vsts 代理上执行任何包含 azure powershell 任务的管道时 我收到一条错误消息 错误消息
  • Grails:Tomcat 不会在产品中完全关闭

    我在关闭生产环境中的 Grails 应用程序时遇到问题 从 IntelliJ 运行时 它会干净地关闭 但在独立的 Tomcat 7 上 关闭会使其进入僵尸状态 其中 java 进程仍然存在 但 HTTP 请求挂起 我必须杀死java进程 使
  • ClickableSpan TextView 在单击后保持选中状态

    我正在使用以下代码来制作我的TextView显示像一个链接 当用户单击它时 我会显示一个AlertDialog 但在用户离开对话框后 文本仍保持选中状态 而且看起来很丑 TextView terms TextView findViewByI
  • Angular 2:从 MockBackend 静态解析符号值时遇到错误

    我是 Angular2 的新手 正在尝试运行它tutorial http jasonwatmore com post 2016 08 16 angular 2 jwt authentication example tutorial 它使用一
  • 如何实现Java流?

    我想实施一个Stream
  • OpenCL C/C++ 动态绑定库(win32 及更多)

    我正在尝试 OpenCL 为了将其投入生产 我希望能够动态绑定到 OpenCL DLL 在 Windows 下 以便 优雅地 处理没有 OpenCL 的情况安装在主机上 是否有任何可用的库 或代码片段 可以在 C 或 C 中处理这种动态绑定
  • 设置 android:extractNativeLibs=false 以减少应用程序大小

    我不确定我是否做对了 看来它正在做相反的事情 如果我保留旗帜android extractNativeLibs https developer android com reference android R attr html extrac
  • 影响流星服务的页面编码?

    如何为使用meteor服务的页面设置编码 目前我的 Firefox 不断输出此警告 The character encoding of the HTML document was not declared The document will
  • Flask 和 Flask-Login 新手 - ImportError:没有名为登录的模块

    看来 Flask login 的安装有问题 尽管使用以下命令成功安装 pip install flask login 我的 app py 文件 from flaskext login import LoginManager lm Login
  • 如何在 iText 中创建具有多个标题的表格?

    我如何实现以下目标 目前我可以得到单头表 如何在具有 colspan 的列上方添加列标题 要创建具有多个标题的表格 请使用 Table addHeaderCell 如下例所示 String 文件名 test pdf PdfDocument
  • 在 WP7 中将照片上传到 picasa 时出现未经授权的访问异常

    我有以下代码尝试将图片上传到 picasa 网站 当我尝试上传时 出现未经授权的访问异常 我不知道如何获取 AuthToken 这是我的代码 如果您有任何线索 请告诉我 public delegate void UploadPhotoCal
  • 在 Python 中监听连接时接收命令行输入

    我正在尝试编写一个程序 让客户端连接到它 同时服务器仍然能够向所有客户端发送命令 我正在使用 扭曲 解决方案 我该怎么办 这是我到目前为止的代码 我知道 Twisted 已经使用非阻塞套接字 import threading print t
  • JAVA执行Unix系统命令问题

    我在从 JAVA 代码执行系统命令时遇到一个奇怪的问题 其实我想得到Mac OSX来自我的 JAVA 应用程序的系统信息 为此 我正在使用 Runtime getRuntime exec system profiler detailLeve
  • HTML 5 文件输入 iOS 和 Android [Cordova/Phonegap]

    在 PhoneGap 应用程序中 我尝试使用 HTML5 使用相机input像这样的标签 使用 CLI 创建新项目 添加iOS和Android平台 添加相机插件 为两种设备构建 在两台设备上运行 实际设备 iPhone 5 配备 iOS 7
  • DataGridView 重新加载后保存过滤

    我在 C 中使用 DataGridView 时遇到一些问题 case is 我对数据库进行一些更新 然后使用新值重新加载 DataGridView myDataGridView DataSource myDataSet Tables 0 一
  • Android Canvas.drawText

    我有一个视图 我正在 onDraw Canvas canvas 方法中使用 Canvas 对象进行绘制 我的代码是 Paint paint new Paint paint setColor Color WHITE paint setStyl
  • CSS DIV 内联在底部

    我有3个部门要放inline at the bottom 我不知道该怎么做 任何人都可以帮助我吗 The expected output 我尝试过的代码 feature description margin top 20px padding
  • 从 CentOS 7 或 RHEL 7 中完全删除 MariaDB 或 MySQL

    我在 CentOS 7 上安装了 MariaDB 但我在某些配置上遇到了一些问题 现在它完全配置错误 因此 我想用 yum remove mariadb mariadb server 删除MariaDB 然后用 yum install ma
  • 使用 R 分割字符串和计算字符的更快方法?

    我正在寻找一种更快的方法来计算从 FASTA 文件读取的 DNA 字符串的 GC 含量 这归结为获取一个字符串并计算字母 G 或 C 出现的次数 我还想指定要考虑的字符范围 我有一个工作函数相当慢 它导致我的代码出现瓶颈 它看起来像这样 c