簡體   English   中英

如何重新排列矩陣列表中的每個矩陣?

[英]How do I rbind every number of matrices in a list of matrices?

假設我有以下矩陣列表:

c1 <- matrix(rnorm(10),5,2)
c2 <- c1+(rnorm(10))
c3 <- c1+(rnorm(10))
c4 <- c1+(rnorm(10))
c5 <- c1+(rnorm(10))
c6 <- c1+(rnorm(10))
clist <- list(c1,c2,c3,c4,c5,c6)

[[1]]
           [,1]        [,2]
[1,] -0.1591251  0.36887661
[2,]  0.4200732 -1.21884880
[3,] -0.6763903 -0.02593779
[4,]  0.1658612 -0.65441390
[5,] -1.4652644 -0.10981210

[[2]]
           [,1]        [,2]
[1,] -1.5475582  1.33232706
[2,]  0.9781123 -0.70260202
[3,] -1.1577471  2.04805617
[4,]  0.4535016 -1.08563438
[5,] -3.0072380  0.06337565

[[3]]
           [,1]       [,2]
[1,]  0.5475332 -0.7793278
[2,] -1.8806731 -1.1158255
[3,] -0.4837955 -0.8165737
[4,] -1.4951387 -0.2655842
[5,] -0.1487497 -0.4243752

[[4]]
             [,1]       [,2]
[1,] -1.270525331  0.5796936
[2,]  1.309900315 -2.4646281
[3,] -2.313890536  1.5281795
[4,]  0.003287924 -2.3560008
[5,] -1.903412482 -2.6763855

[[5]]
           [,1]        [,2]
[1,] -0.4553650  0.06665067
[2,] -0.4382334 -0.91694728
[3,] -1.8101902  0.29204456
[4,]  0.6602221 -0.45068171
[5,] -1.3796827  0.51264234

[[6]]
           [,1]       [,2]
[1,] -1.0130324  1.4233890
[2,]  0.9672156 -0.9425755
[3,] -2.5090911 -0.5489537
[4,]  0.7705731  1.0351301
[5,] -0.0414573 -1.8325651

我想合並c1+c2, c3+c4, c5+c6並將它們保留在列表中。 我可以使用以下代碼手動進行操作:

cm1 <- do.call("rbind", clist[1:2])
cm2 <- do.call("rbind", clist[3:4])
cm3 <- do.call("rbind", clist[5:6])
cmlist <- list(cm1, cm2, cm3)

但是因為我的實際數據會更大,所以這種方法將非常耗時。 有更快的方法嗎?

嘗試這個:

cmlist1=lapply(seq(1,length(clist),by=2),function(x)do.call("rbind", clist[x:(x+1)]))

接下來呢?

mapply(rbind,
       clist[which(seq(1,length(clist)) %% 2 == 1)],
       clist[which(seq(1,length(clist)) %% 2 == 0)],
       SIMPLIFY = F)

我們創建一個分組變量g (等於c(1, 1, 2, 2, ...) rbind c(1, 1, 2, 2, ...) ),然后將其除以將每個組件的元素rbind在一起:

n <- length(clist)
g <- c(gl(n, 2, n))
lapply(split(clist, g), "do.call", what = "rbind")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM