我有一个对称矩阵列表,我只想将下三角用于:
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]
但是我还无法弄清楚该怎么做。
答案 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)])