利用组合提高R码的效率

利用组合提高R码的效率,r,performance,R,Performance,我有一份数据 数据: [1] "146002 1591246 1453825 1976867 318484" [2] "669019 557068 787848 1752826 595490 1370072 32948 1059410 456048

我有一份数据

数据:

[1] "146002 1591246 1453825 1976867 318484"                                                                                                                             
[2] "669019 557068 787848 1752826 595490 1370072 32948 1059410 456048 2075616 2151636"                                                                                  
[3] "7052 84626 1876916 289198 1925401"                                                                                                                                 
[4] "2074708 609769 2074708 1586598 1750679"                                                                                                                            
[5] "230221 818400 230221 550378 569906 158775 178756"                                                                                                                  
[6] "357215 1000036 45393
我想以这样一种方式生成这些元素的组合,即为每一行形成协同

第1行

“146001591246”、“14600145825”、“1460021976867”、“15912461453825”

五个值加上一对两个值的组合,这适用于所有行

然后我需要将所有这些值绑定到一个向量中,以便最终输出如下所示:

final output :
146002 1591246
146002 145825
.........
我正在做以下工作,但这需要很多时间:

 gram_2<-vector()
 for(i in 1:length(data))
 {
   if(length(unlist(strsplit(data[i]," ")))>2){
      comb<-combn(unlist(strsplit(data[i]," ")),2)
      for(j in 1:ncol(comb))
         {
          gram_2<-rbind(gram_2,paste(comb[,j],collapse=" "))
         }
      }
   gram_2<-rbind(gram_2,paste(data[i],collapse=" "))
 }
gram_22){
梳单线溶液

apply(do.call(cbind, lapply(strsplit(data, " "), combn, 2)), 2, paste, collapse=" ")
根据阿南达更新

unlist(lapply(strsplit(data, " ", fixed=TRUE), combn, 2, paste, collapse=" "))

我认为粘贴在一起会降低结果的有用性,因此构建了一个两列矩阵:

do.call(rbind, sapply( lapply( sapply(vec, strsplit, " "), combn, 2),t))

不确定速度的提高,但是
combn
有一个
FUN
参数,允许您将
paste
移动到
combn
调用本身(从而消除了
do.call
)中。另外,将
fixed=TRUE
添加到
strsplit
通常会导致更高效的处理(如果模式是固定的,它看起来就在这里)。谢谢,我不知道combn有一个有趣的论点。:)这是一个经常被忽略的特性:-)
t
是矩阵或数据帧转置函数。