r применить список логических матриц к списку матриц - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть список симметричных матриц, для которых я хочу использовать только нижний треугольник:

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

Я хочу применить этот список логических матриц, чтобы получить список векторов со значениями из нижнего треугольника («ИСТИНА»).

Я пробовал несколько способов, например,

my_list[lowtri]

Но я не смог понять, как это сделать.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Подумайте об обходе генерации логических матриц и примените lower.tri() в вашем списке:

new_list <- lapply(my_list, function(x) x[lower.tri(x)])
0 голосов
/ 01 ноября 2018

Мы можем использовать Map для извлечения значений каждого из matrix на основе соответствующего логического matrix в 'lowtri' list

Map(`[`, my_list, lowtri)

Или используя map2 из purrr

library(tidyverse)
map2(my_list, lowtri, `[`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...