使用 mclapply 分割雪茄矢量的有效方法

Posted

技术标签:

【中文标题】使用 mclapply 分割雪茄矢量的有效方法【英文标题】:Efficient way to split a vector of cigars using mclapply 【发布时间】:2013-09-28 17:54:54 【问题描述】:

我有一个非常大的雪茄向量:

my.vector = c("44M2D1I","32M465N3M", "3S4I3D45N65M")

我想转换成一个分割雪茄的向量 - 逻辑如下:每当我找到一个数字后跟一个 N 时,我必须将它分割,这就是我将“32M465N3M”分割为“32M”的原因","465N","3M";和“3S4I3D45N65M”到“3S4I3D”、“45N”、“65M”;并且“44M2D1I”没有被拆分,因为它没有“N”。

my.vector.split = c("44M2D1I, "32M", "465N", "3M", "3S4I3D", "45N", "65M").

我的向量非常大,所以理想情况下我想使用集群的并行功能。我想将 mclapply 与 ncores 一起使用。

理想情况下,我想这样定义:

 my.vector.split = unlist(mclapply(my.vector, my.splitting.function, mc.cores = ncores))

my.vector.split 的长度是 length(my.vector) + (number of Ns)*2。

注意。我使用的 HPC 集群没有安装最新的 bioconductor,所以我无法使用 cigartoRleList 和其他不错的雪茄操作工具。

【问题讨论】:

@Gsee,对不起,是的,结果就是这样。我把它改成了正确的版本。 @Dualinity,它是一个字符向量,表示读取与参考基因组的比对 - 更多详情请点击此处:samtools.sourceforge.net/SAMv1.pdf 第 5 页第 5 点。 【参考方案1】:

这应该是适用的。详细信息将根据您设置集群的方式而有所不同,但基本上这将返回一系列数据框。如果您希望它们作为向量,则将 unlist 包裹在它们周围:

 lapply(gsub("([[:digit:]]+N)", ",\\1,", my.vector) , 
         function(x) unlist( read.table(text=x,sep=",",colClasses="character")) )
#------------
[[1]]
       V1 
"44M2D1I" 

[[2]]
    V1     V2     V3 
 "32M" "465N"   "3M" 

[[3]]
      V1       V2       V3 
"3S4I3D"    "45N"    "65M" 

【讨论】:

我认为这会很慢。我是按照strsplit(gsub("(\\d+N)", "_\\1_", my.vector), "_") 的思路思考的,但很多都不利于mclapply。此外,必须有一种方法不需要strsplitgsub @Gsee,嗯,如果您认为这可能效率不高,您可能是对的...如果 strsplit 没有摆脱匹配字符,我们可以直接使用 strsplit...stat.ethz.ch/pipermail/r-devel/2006-April/037120.html。 ..但似乎该选项尚未实施... 我假设你想要解析 gsub 结果。或者,您可能希望使用gregexprregexec 来识别substr 提取的位置。

以上是关于使用 mclapply 分割雪茄矢量的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS应用(二十三)矢量图层要素分割方法(基于属性和空间分割)

将分割图矢量化为 RGB 颜色

ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool

ArcGIS应用(二十六)按照属性分割矢量图层要素为新的图层

ArcGIS应用(二十六)按照属性分割矢量图层要素为新的图层

有效地矢量化图像块处理?