【问题标题】:A function to add nested matrices together将嵌套矩阵相加的函数
【发布时间】:2020-07-13 21:46:25
【问题描述】:

我有一个名为 Transitions 的列表,其中包含 3 个尺寸组的结果:Small、Medium 和 Large。每个尺寸组中都有多个矩阵。我感兴趣的嵌套元素是 Transitions$"Size Group"$nij。

我想编写一个函数,将所有三个 size 元素及其各自的 nij 矩阵元素加在一起。

类似于Reduce('+', List of Matrices)的东西

我手动收集了 nij 矩阵并列出了我所拥有的。

Transitions.ls <- 
list(Small = structure(c(38L, 83L, 112L, 58L, 142L, 83L, 124L, 
62L, 23L), .Dim = c(3L, 3L), .Dimnames = list(i = c("Downgraded", 
"Unchanged", "Upgraded"), j = c("Downgraded", "Unchanged", "Upgraded"
)), class = "table"), Medium = structure(c(83L, 184L, 210L, 134L, 
243L, 183L, 256L, 122L, 86L), .Dim = c(3L, 3L), .Dimnames = list(
    i = c("Downgraded", "Unchanged", "Upgraded"), j = c("Downgraded", 
    "Unchanged", "Upgraded")), class = "table"), Large = structure(c(3L, 
9L, 11L, 6L, 4L, 18L, 21L, 13L, 10L), .Dim = c(3L, 3L), .Dimnames = list(
    i = c("Downgraded", "Unchanged", "Upgraded"), j = c("Downgraded", 
    "Unchanged", "Upgraded")), class = "table"))

上面列表中的每个矩阵都是嵌套的。我做了以下获取它们:

Transitions.ls <- list(Transitions$Small$nij, Transitions$Medium$nij,Transitions$Large$nij)

我想要的输出是:

Reduce('+', Transitions.ls)
            j
i            Downgraded Unchanged Upgraded
  Downgraded        124       198      401
  Unchanged         276       389      197
  Upgraded          333       284      119

原始列表Transitions的数据结构:

    List of 3
 $ Small :List of 12
  ..$ nij        : 'table' int [1:3, 1:3] 38 83 112 58 142 83 124 62 23
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ ni         : Named num [1:3] 220 287 218
  .. ..- attr(*, "names")= chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ pij        : 'table' num [1:3, 1:3] 0.173 0.289 0.514 0.264 0.495 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ pj         : Named num [1:3] 0.321 0.39 0.288
  .. ..- attr(*, "names")= chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ se.pij     : 'table' num [1:3, 1:3] 0.0255 0.0268 0.0339 0.0297 0.0295 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ nij.out    : 'xtabs' int [1:3, 1:3] 1 3 3 1 8 4 2 1 1
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  ..$ ni.out     : Named num [1:3] 4 12 8
  .. ..- attr(*, "names")= chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ pij.out    : 'xtabs' num [1:3, 1:3] 0.25 0.25 0.375 0.25 0.667 ...
  .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ pj.out     : Named num [1:3] 0.292 0.542 0.167
  .. ..- attr(*, "names")= chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ se.pij.out : 'xtabs' num [1:3, 1:3] 0.217 0.125 0.171 0.217 0.136 ...
  .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ p.diff     : 'table' num [1:3, 1:3] -0.0773 0.0392 0.1388 0.0136 -0.1719 ...
  .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  ..$ Transitions:List of 16
  .. ..$ 1998: 'xtabs' int [1:3, 1:3] 2 10 12 5 11 6 7 6 2
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 1999: 'xtabs' int [1:3, 1:3] 4 9 8 6 8 5 14 6 2
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2000: 'xtabs' int [1:3, 1:3] 5 8 12 6 10 8 10 4 4
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2001: 'xtabs' int [1:3, 1:3] 6 5 10 8 12 5 9 7 3
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2002: 'xtabs' int [1:3, 1:3] 4 8 10 6 12 7 10 7 3
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2003: 'xtabs' int [1:3, 1:3] 3 8 12 4 6 7 13 6 0
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2004: 'xtabs' int [1:3, 1:3] 1 4 7 5 5 10 12 6 0
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2005: 'xtabs' int [1:3, 1:3] 1 5 6 3 11 8 8 3 2
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2006: 'xtabs' int [1:3, 1:3] 4 7 7 1 13 4 6 2 2
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2007: 'xtabs' int [1:3, 1:3] 3 2 4 4 10 3 9 2 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2008: 'xtabs' int [1:3, 1:3] 1 3 3 2 8 5 3 2 0
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2009: 'xtabs' int [1:3, 1:3] 1 5 4 2 5 0 4 5 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2010: 'xtabs' int [1:3, 1:3] 1 2 8 4 4 4 6 1 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2011: 'xtabs' int [1:3, 1:3] 1 3 3 1 9 4 6 2 0
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2012: 'xtabs' int [1:3, 1:3] 0 1 3 0 10 3 5 2 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)
  .. ..$ 2013: 'xtabs' int [1:3, 1:3] 1 3 3 1 8 4 2 1 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ i: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. .. ..$ j: chr [1:3] "Downgraded" "Unchanged" "Upgraded"
  .. .. ..- attr(*, "call")= language xtabs(formula = n ~ i + j, data = .)

【问题讨论】:

  • 请举一个小例子。也许lapply(Transitions, function(x) Reduce('+', x))
  • 我在帖子中为您提供了一些数据。
  • 带有Transitions 的第二个代码 sn-p 不起作用。是原始对象Transitions 而不是Transitions.ls
  • 是的,“Transitions”是包含所有元素的原始列表。
  • 你能用str..显示原始结构吗?不清楚它是哪种嵌套方式

标签: r list matrix


【解决方案1】:

也许,我们可以遍历“Size Group”向量,提取带有[[的元素,然后提取'nij'(这里可以使用$[[),然后应用@987654324 @

v1 <- c("Small", "Medium", "Large")
Reduce(`+`, lapply(v1, function(nm) Transitions[[nm]]$nij))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2021-11-02
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多