【问题标题】:How do I insert a matrix from a list into a different list of matrices after every nth matrix?如何在每个第 n 个矩阵之后将列表中的矩阵插入到不同的矩阵列表中?
【发布时间】:2017-11-10 12:52:52
【问题描述】:

示例数据:

第一个矩阵列表:

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,]  1.16937929 -0.44686704
[2,] -1.71374929 -0.05024722
[3,] -0.53382340 -0.04600470
[4,] -0.04044502 -1.82671547
[5,] -1.70016440 -0.29055706

[[2]]
           [,1]       [,2]
[1,]  1.8261409  1.2420189
[2,] -3.8692178  1.1538126
[3,]  0.3467076 -0.7718303
[4,] -3.1253087 -1.5639540
[5,] -2.0631379 -0.6334828

[[3]]
           [,1]       [,2]
[1,] -0.3836731 -2.6561491
[2,] -3.4370839 -0.7189812
[3,] -0.8897828  0.8880357
[4,] -0.9525466 -2.5769396
[5,] -2.1867013  0.3046946

[[4]]
           [,1]       [,2]
[1,]  0.6109367 -1.0488075
[2,] -2.0091019 -0.8754184
[3,] -1.7069800 -0.2801976
[4,]  0.9334261 -3.8255870
[5,] -1.6822699  0.9734554

[[5]]
           [,1]       [,2]
[1,]  1.7572672 -0.2234586
[2,] -2.4024455  0.4508621
[3,] -0.7868861 -1.6521005
[4,]  0.2301057 -1.7658791
[5,]  0.2453109  0.3295073

[[6]]
           [,1]       [,2]
[1,]  0.5374283 -1.7285851
[2,] -2.5346283 -0.5007830
[3,] -1.6930066 -0.8153968
[4,]  0.9397925 -0.4508327
[5,] -3.2985109  0.7507062

还有第二个矩阵列表:

a1 <- matrix(rnorm(10),5,2)
a2 <- a1+(rnorm(10))
a3 <- a1+(rnorm(10))
alist <- list(a1, a2, a3)

[[1]]
           [,1]       [,2]
[1,] -0.3757278 -0.1486482
[2,] -0.3005715  1.3207322
[3,] -0.2823023 -0.6269376
[4,] -0.3914970  0.8810226
[5,]  1.3278155  1.2826003

[[2]]
           [,1]      [,2]
[1,]  0.2722553 0.4236911
[2,] -1.2992684 0.9879655
[3,] -0.8374446 0.4617695
[4,]  1.6460518 1.5344395
[5,]  1.0890759 3.7607345

[[3]]
           [,1]        [,2]
[1,] -0.7965729 -0.02635211
[2,] -0.3065876  0.05762188
[3,]  0.5919724 -1.48663558
[4,]  1.1887124  1.47474007
[5,]  0.8573545  1.35161592

我想在clist列表c2c3之间从alist插入a1,然后在alistc5之间插入a2和@ 987654332@ 在c6 之后。

所以模式是在clist 中的每个第二个矩阵之后插入来自alist 的每个连续矩阵,所以它看起来像c1 c2 a1 c3 c4 a2 c5 c6 a3 c7 c8 a4...。因为我的数据会更大,所以我需要一些可以应用于大型数据集的东西。我该怎么做呢?

【问题讨论】:

  • 这里的模式是什么?
  • 我可能还不够清楚。我想从alist 中取出第一个矩阵并将其插入到clist 的前两个矩阵之后。然后我想从alist 中取出第二个矩阵并在clist 中的下两个矩阵之后插入,依此类推。所以 c1 c2 a1 c3 c4 a2 c5 c6 a3 c7 c8 a4....

标签: r list matrix


【解决方案1】:

您可以以合理的方式命名这两个列表,将它们组合成一个列表并按名称排序。

names(clist) <- paste0("c", seq_along(clist))
names(alist) <- paste0("c", seq_along(alist)*2, "a")
x <- c(clist, alist)
x <- x[order(names(x))]

那么你有以下顺序:

names(x)
# [1] "c1"  "c2"  "c2a" "c3"  "c4"  "c4a" "c5"  "c6"  "c6a"

【讨论】:

  • 非常感谢,这是一个简单而聪明的解决方案!
  • 嗨 docendo,所以我尝试使用一个包含 22 个矩阵的列表和另一个包含 2 个矩阵的列表来执行此操作。我需要在每 11 个矩阵之后将带有矩阵的列表中的每个矩阵插入到更长的列表中。我尝试运行您的代码,但似乎 R 无法识别 c10 大于 c1,因此我以按如下顺序排列的矩阵列表结束:$c1c$10c$11、@987654326 @、c$12 等。你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2017-05-10
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多