Для извлечения элемента из списка вам необходимо использовать двойные скобки. Рассмотрим пример ниже. Давайте создадим список матриц.
# Dummy list
foo <- list(first = matrix(runif(16), ncol = 4),
second = matrix(runif(16), ncol = 4))
Это выглядит следующим образом:
# Quick peek
print(foo)
#> $first
#> [,1] [,2] [,3] [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
#>
#> $second
#> [,1] [,2] [,3] [,4]
#> [1,] 0.57426947 0.59617809 0.05355548 0.05962695
#> [2,] 0.60420788 0.06640785 0.43616808 0.03359352
#> [3,] 0.44216820 0.58033207 0.22686284 0.42624557
#> [4,] 0.08838313 0.27258925 0.71353586 0.76606084
Теперь давайте посмотрим на первый элемент, используя только один набор скобок.
# Extract one element as a list
a <- foo['first'] # Or foo[1]
# Examine output
print(a)
#> $first
#> [,1] [,2] [,3] [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
class(a)
#> [1] "list"
Вы заметите, что это список. Давайте попробуем использовать два набора скобок.
# Extract one element
b <- foo[['first']] # Or foo[[1]]
# Examine output
print(b)
#> [,1] [,2] [,3] [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
class(b)
#> [1] "matrix"
Создано в 2019-06-18 пакетом представ. (v0.3.0)
Это матрица! Кроме того, он сохраняет первоначальную структуру матрицы.