小弟最近在写一个关于分子标记指纹图谱的包,数据如下图
 
第一列为品种名,其它列为标记,每行一个观测,现在要从所有标记中选择n个标记,重新组合成图1的形式,计算一些参数。我建了一个函数,进行标记的全组合:
fun<- function(input,n) {
  dna_n<- input[1];
  com<- combn(names(input[-1]),n);
  number<- choose(ncol(input)-1,n);
   for(i in 1:number) dna_n[paste(com[,i],collapse = "+")]<- droplevels(interaction(subset(input,select = com[,i])))
  return(dna_n)
}
参数input为图1的数据,n为选取的标记数,这个函数比较暴力,将所有组合都列出,在进行一步计算比较,在标记较小的时候可以很好的实现,但是当标记数太大的时候,运行速度很慢,使用并行运算也没有很好的改善。期望有大神能不能帮忙修改下代码,提高速度,或者提高一个比较好的抽样算法提高我这个穷举法。