Вы можете использовать relist
, чтобы сделать структуру x
похожей на my_list
:
relist(x, my_list)
#[[1]]
#[[1]][[1]]
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[[1]][[2]]
# [,1] [,2] [,3]
#[1,] 2 8 14
#[2,] 4 10 16
#[3,] 6 12 18
#[[2]]
#[[2]][[1]]
# [,1] [,2] [,3]
#[1,] 3 12 21
#[2,] 6 15 24
#[3,] 9 18 27
#[[3]]
#[[3]][[1]]
# [,1] [,2] [,3]
#[1,] 4 16 28
#[2,] 8 20 32
#[3,] 12 24 36
Аналогичный результат получается с использованием lapply
:
lapply(my_list, function(i) x[i])
Если вы хотите избежать вложенного вывода для одиночной матрицы и хотите, чтобы он был именно таким, как показано, вы можете использовать:
lapply(my_list, function(i) if(length(i) > 1) x[i] else x[[i]])
#[[1]]
#[[1]][[1]]
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[[1]][[2]]
# [,1] [,2] [,3]
#[1,] 2 8 14
#[2,] 4 10 16
#[3,] 6 12 18
#[[2]]
# [,1] [,2] [,3]
#[1,] 3 12 21
#[2,] 6 15 24
#[3,] 9 18 27
#[[3]]
# [,1] [,2] [,3]
#[1,] 4 16 28
#[2,] 8 20 32
#[3,] 12 24 36
Вы можете прочитать разницу между [
и [[
здесь: Разница между скобкой [] и двойной скобкой [[]] для доступа к элементам списка или фрейма данных