我有以下向量:
my.vector = c("4M1D5M15I1D10M", "3M", "4M2I3D")
我想将其转换为以下向量:
my.result = c("21N", "3N", "7N")
此类结果的逻辑如下,因为"4M1D5M15I1D10M"
我添加了所有数字,除了字符前面的数字"I"
,即 4+1+5+1+10=21(我没有添加 15,因为它在前面"I"
),然后在 21 之后粘贴一个 N,变成"21N"
.
同样的"3M"
,没有"I"
字符,所以它就变成了"3N"
;和最后一个一样,4+3=7(我没有加 2,因为它在一个 之前"I"
),变成"7N"
.
请注意,my.vector 非常大,因此我想通过 mclapply 使用 HPC 服务器的并行功能。理想情况下,我会运行这样的东西来得到我的结果:
my.result = unlist(mclapply(my.vector, my.adding.function, mc.cores = ncores))
为了定义我的功能,我尝试了以下方法:
my.adding.function <- function(x)
{
tmp = unlist(strsplit(x, "\\d+I"))
tmp2 = unlist(strsplit(tmp, "M|D|S|N"))
tmp3 = sum(as.numeric(tmp2))
return(paste(tmp3, "N",sep=""))
}
虽然不确定这种功能的效率......