I have a matrix "a" like the following:
a<-rbind(c("a1","ost1;ost2;ost3","utr;body;pro"), c("a2","idh1;idh2","pro;body"), c("a3","dnm1","body")) >a [,1] [,2] [,3] [1,] "a1" "ost1;ost2;ost3" "utr;body;pro" [2,] "a2" "idh1;idh2" "pro;body" [3,] "a3" "dnm1" "body" I want to get a matrix "b" like this
[,1] [,2] [,3] [1,] "a1" "ost1" "utr" [2,] "a1" "ost2" "body" [3,] "a1" "ost3" "pro" [4,] "a2" "idh1" "pro" [5,] "a2" "idh2" "body" [6,] "a3" "dnm1" "body" OK, get it:
b<-do.call(rbind, (apply(a, 1, function(x) {do.call(cbind, strsplit(x,";"))})))
do.callis almost like magic :-) . Nice work.