r将逻辑矩阵列表应用于矩阵列表

时间:2018-11-01 15:47:35

标签: r list matrix indexing

我有一个对称矩阵列表,我只想将下三角用于:

my_list

$m1
     V1   V2   V3   V4   V5
[1,] 1.00 0.22 0.27 0.30 0.35
[2,] 0.22 1.00 0.33 0.35 0.15
[3,] 0.27 0.33 1.00 0.44 0.44
[4,] 0.30 0.35 0.44 1.00 0.44
[5,] 0.35 0.15 0.44 0.44 1.00

$m2
     V1   V2   V3   V4   V5
[1,] 1.00 0.16 0.34 0.26 0.23
[2,] 0.16 1.00 0.33 0.20 0.21
[3,] 0.34 0.33 1.00 0.34 0.44
[4,] 0.26 0.20 0.34 1.00 0.18
[5,] 0.23 0.21 0.44 0.18 1.00`

要获得下部三角形,我首先使用

列出了逻辑矩阵列表
lowtri <- lapply(DATA_RSAbrain,lower.tri)

      [,1]  [,2]  [,3]  [,4]  [,5]
[1,] FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE
[3,]  TRUE  TRUE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE FALSE FALSE
[5,]  TRUE  TRUE  TRUE  TRUE FALSE

      [,1]  [,2]  [,3]  [,4]  [,5]
[1,] FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE
[3,]  TRUE  TRUE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE FALSE FALSE
[5,]  TRUE  TRUE  TRUE  TRUE FALSE

我想应用此逻辑矩阵列表以获取带有下三角形(“ TRUE”)值的向量列表。

我尝试了多种方法,例如

my_list[lowtri]

但是我还无法弄清楚该怎么做。

2 个答案:

答案 0 :(得分:2)

我们可以使用Map根据'lowtri'matrix

中相应的逻辑matrix提取每个list的值
Map(`[`, my_list, lowtri)

或使用map2中的purrr

library(tidyverse)
map2(my_list, lowtri, `[`)

答案 1 :(得分:2)

考虑绕过生成逻辑矩阵,并将lower.tri()应用于列表:

new_list <- lapply(my_list, function(x) x[lower.tri(x)])