Magnus Moller
Magnus Moller

Reputation: 87

Creating 50 square diagonal matrices in R

I want to create 50 square diagonal matrices in R, each of those with dimensions 100 by 100. In each diagonal I want ${1^1,2^1,3^1,...,100^1},{1^2,2^2,3^2,...,100^2},...{1^{100},2^{100},3^{100},...,100^{100}}$.

For that I wrote the following code:

Sigma<-matrix(list(matrix(0,100,100)),50)
for(j in 1:50){
for (l in 1:100){
for (i in 1:100){Sigma[[j]][l,l] <- i^j }

But instead, I get for matrix number one this:

> Sigma[[1]]
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
  [1,]  100    0    0    0    0    0    0    0    0     0     0     0     0     0
  [2,]    0  100    0    0    0    0    0    0    0     0     0     0     0     0
  [3,]    0    0  100    0    0    0    0    0    0     0     0     0     0     0
  [4,]    0    0    0  100    0    0    0    0    0     0     0     0     0     0
  [5,]    0    0    0    0  100    0    0    0    0     0     0     0     0     0
  [6,]    0    0    0    0    0  100    0    0    0     0     0     0     0     0
  [7,]    0    0    0    0    0    0  100    0    0     0     0     0     0     0
  [8,]    0    0    0    0    0    0    0  100    0     0     0     0     0     0
  [9,]    0    0    0    0    0    0    0    0  100     0     0     0     0     0
 [10,]    0    0    0    0    0    0    0    0    0   100     0     0     0     0
       [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
  [1,]     0     0     0     0     0     0     0     0     0     0     0     0
  [2,]     0     0     0     0     0     0     0     0     0     0     0     0
  [3,]     0     0     0     0     0     0     0     0     0     0     0     0
  [4,]     0     0     0     0     0     0     0     0     0     0     0     0
  [5,]     0     0     0     0     0     0     0     0     0     0     0     0
  [6,]     0     0     0     0     0     0     0     0     0     0     0     0
  [7,]     0     0     0     0     0     0     0     0     0     0     0     0
  [8,]     0     0     0     0     0     0     0     0     0     0     0     0
  [9,]     0     0     0     0     0     0     0     0     0     0     0     0
 [10,]     0     0     0     0     0     0     0     0     0     0     0     0
       [,99] [,100]
  [1,]     0      0
  [2,]     0      0
  [3,]     0      0
  [4,]     0      0
  [5,]     0      0
  [6,]     0      0
  [7,]     0      0
  [8,]     0      0
  [9,]     0      0
 [10,]     0      0

which is not a 100 by 100 matrix and the diagonals are all wrong they are supposed to be 1.

Question:

Can someone help me solve this problem?

Upvotes: 0

Views: 56

Answers (2)

ThomasIsCoding
ThomasIsCoding

Reputation: 101373

We can use lapply

n <- 100
res <- lapply(seq(n), function(k) diag(seq(n))^k)

Let's try on a small n

> n <- 3

> (res <- lapply(seq(n), function(k) diag(seq(n))^k))
[[1]]
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3

[[2]]
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    4    0
[3,]    0    0    9

[[3]]
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    8    0
[3,]    0    0   27

Upvotes: 1

Onyambu
Onyambu

Reputation: 79228

You could do:

a<- seq(100)

my_list <- lapply(data.frame(outer(a,a,'^')),diag)

Upvotes: 1

Related Questions