我有一大堆雪茄:
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和其他漂亮的雪茄操作工具。
答案 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"