使用 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
。此外,必须有一种方法不需要strsplit
和gsub
@Gsee,嗯,如果您认为这可能效率不高,您可能是对的...如果 strsplit 没有摆脱匹配字符,我们可以直接使用 strsplit...stat.ethz.ch/pipermail/r-devel/2006-April/037120.html。 ..但似乎该选项尚未实施...
我假设你想要解析 gsub 结果。或者,您可能希望使用gregexpr
或regexec
来识别substr
提取的位置。以上是关于使用 mclapply 分割雪茄矢量的有效方法的主要内容,如果未能解决你的问题,请参考以下文章
ArcGIS应用(二十三)矢量图层要素分割方法(基于属性和空间分割)
ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool
ArcGIS应用(二十六)按照属性分割矢量图层要素为新的图层