次のベクトルがあります。
my.vector = c("4M1D5M15I1D10M", "3M", "4M2I3D")
そして、それを次のベクトルに変換したいと思います。
my.result = c("21N", "3N", "7N")
このような結果のロジックは次のとおりです。文字の"4M1D5M15I1D10M"
前にある数字、つまり 4+1+5+1+10=21 を除くすべての数字を追加したためです"I"
(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=""))
}
ただし、そのような機能の効率についてはわかりません...