优化循环以使用 lapply 或在 R 中应用来组合列表中的项目

optimize the loop to combine items from a list using lapply or sapply in R

我以下面的列表为例:

>lista 
[[1]]
      row col   
[1, ]   4 453
[2, ]   5 453

[[2]]
     row col
[1, ] 26 264
[2, ] 26 265
[3, ] 26 266
[4, ] 27 265
[5, ] 27 266

[[3]]
     row col
[1,]  35 364
[1,]  35 365
[2,]  35 366

目标是将list的元素进行组合,形式为:list[[1]]与list[[2]],list[[1]]与list[[3]]相继(我有一个包含五千个或更多项目的列表)

预期结果是:

[[1]]
      row col   
[1, ]   4 453
[2, ]   5 453
[3, ]  26 264
[4, ]  26 265
[5, ]  26 266
[6, ]  27 265
[7, ]  27 266

[[2]]
     row col    
[1, ]  4 453
[2, ]  5 453
[3, ] 35 364
[4, ] 35 365
[5, ] 35 366
.
.
.

所以,我有以下功能,效果很好,但由于列表中的项目数非常多,这个过程需要很长时间。

rows_bind <- function(all_GG){
  nn_GG <- length(all_GG)
  lista_analizar <- list()
  cont <- 1
  repeat {
    lista_analizar[[cont]] <- rbind(all_GG[[1]], all_GG[[cont+1]])
    cont = cont + 1
    if (cont == nn_GG){
      break
    }
  }
  return(lista_analizar)
}

我的问题是:如何优化这个功能?在 lapply()sapply() 等函数中使用它。或者更好的是使用 parSapply()parLapply()

在循环中增长对象大多效率低下。尝试 Map/lapply :

result <- Map(rbind, lista[1], lista[-1])

使用 lapply 你可以这样写:

result <- lapply(lista[-1], function(x) rbind(lista[[1]], x))

这个有用吗:

> lista <- list(matrix(c(4,5,453,453),ncol = 2, byrow = F, dimnames = list(NULL,c('row','col'))),
+               matrix(c(26,26,26,27,27,264,265,266,265,266),ncol = 2, byrow = F, dimnames = list(NULL,c('row','col'))),
+               matrix(c(35,35,35,364,365,366),ncol = 2, byrow = F, dimnames = list(NULL,c('row','col')))
+ )
> 
> 
> lapply(seq(2,length(lista)), function(i) do.call(rbind, c(lista[1], lista[i])))
[[1]]
     row col
[1,]   4 453
[2,]   5 453
[3,]  26 264
[4,]  26 265
[5,]  26 266
[6,]  27 265
[7,]  27 266

[[2]]
     row col
[1,]   4 453
[2,]   5 453
[3,]  35 364
[4,]  35 365
[5,]  35 366

>