在R中展开矩阵的列

在R中展开矩阵的列,r,matrix,R,Matrix,我有一个矩阵“a”,如下所示: 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"

我有一个矩阵“a”,如下所示:

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"  
好的,明白了:

b<-do.call(rbind, (apply(a, 1, function(x) {do.call(cbind, strsplit(x,";"))})))

b您的解决方案,没有不必要的括号:

do.call(rbind, apply(a, 1, function(x) do.call(cbind, strsplit(x, ";"))))
这也适用于:

do.call(rbind, lapply(apply(a, 1, strsplit, ';'), do.call, what = cbind))

并不是说使用匿名函数有什么问题(
function(x){…}
),但是有些人觉得它更“优雅”,没有任何问题。

请随意发布您的解决方案作为答案并接受它。
do.call
几乎就像魔术一样:-)。干得好。
do.call(rbind, lapply(apply(a, 1, strsplit, ';'), do.call, what = cbind))