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

时间:2013-09-28 17:54:54

标签: r mclapply

我有一大堆雪茄:

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)+(Ns的数量)* 2.

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

1 个答案:

答案 0 :(得分: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"