17

2D行列のリストを作成したい

> x
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

> y
     [,1] [,2]
[1,]  301  306
[2,]  302  307
[3,]  303  308
[4,]  304  309
[5,]  305  310

> MATS<-c(x,y)

> MATS[1]
[1] 1

まるでx...のようにMATS[1]を参照できるようにしたいと思います。

4

1 に答える 1

18

試す

x <- matrix(1:10, ncol=2)
y <- x+300

MATS <- list(x, y) # use 'list' instead of 'c' to create a list of matrices
MATS
[[1]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[2]]
     [,1] [,2]
[1,]  301  306
[2,]  302  307
[3,]  303  308
[4,]  304  309
[5,]  305  310

ここではMATS[[1]]、あたかもそうであるかのように参照する必要がありますx

既存のリストに新しいマトリックスを追加する場合は、

z <- x+500
MATS[[3]] <- z  # appeding a new matrix to the existing list
MATS

[[1]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[2]]
     [,1] [,2]
[1,]  301  306
[2,]  302  307
[3,]  303  308
[4,]  304  309
[5,]  305  310

[[3]]
     [,1] [,2]
[1,]  501  506
[2,]  502  507
[3,]  503  508
[4,]  504  509
[5,]  505  510

このアプローチの欠点の1つは、新しいマトリックスを追加する必要があるリスト内の位置を知っている必要があることです。それがわからない場合、または単にこのアプローチが必要ない場合は、次のトリックがあります。

unlist(list(MATS, list(z)), recursive=FALSE) # will give u the same list :D
于 2012-12-07T14:42:23.823 に答える