# Exercise 1

A <- matrix(1:50, 5) ; for (i in 1:5) for (j in 1:10) A[i,j] <- i**j ; A # shows A constructed as requested
##      [,1] [,2] [,3] [,4] [,5]  [,6]  [,7]   [,8]    [,9]   [,10]
## [1,]    1    1    1    1    1     1     1      1       1       1
## [2,]    2    4    8   16   32    64   128    256     512    1024
## [3,]    3    9   27   81  243   729  2187   6561   19683   59049
## [4,]    4   16   64  256 1024  4096 16384  65536  262144 1048576
## [5,]    5   25  125  625 3125 15625 78125 390625 1953125 9765625
# alternative, better way
A <- matrix(rep(1:5, each=10), 5, byrow=T) ; B <- matrix(rep(1:10, each=5), 5) ; 
A <- A**B ; A # operations are cellwise in R
##      [,1] [,2] [,3] [,4] [,5]  [,6]  [,7]   [,8]    [,9]   [,10]
## [1,]    1    1    1    1    1     1     1      1       1       1
## [2,]    2    4    8   16   32    64   128    256     512    1024
## [3,]    3    9   27   81  243   729  2187   6561   19683   59049
## [4,]    4   16   64  256 1024  4096 16384  65536  262144 1048576
## [5,]    5   25  125  625 3125 15625 78125 390625 1953125 9765625
# Exercise 2

# constructs and shows A on screen
A <- matrix(rep(1, 100), 10) ; for (i in 1:10) for (j in 1:10) A[i,j] <- abs(i-j) ; A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    0    1    2    3    4    5    6    7    8     9
##  [2,]    1    0    1    2    3    4    5    6    7     8
##  [3,]    2    1    0    1    2    3    4    5    6     7
##  [4,]    3    2    1    0    1    2    3    4    5     6
##  [5,]    4    3    2    1    0    1    2    3    4     5
##  [6,]    5    4    3    2    1    0    1    2    3     4
##  [7,]    6    5    4    3    2    1    0    1    2     3
##  [8,]    7    6    5    4    3    2    1    0    1     2
##  [9,]    8    7    6    5    4    3    2    1    0     1
## [10,]    9    8    7    6    5    4    3    2    1     0
# alternative, better way
A <- matrix(rep(1:10, each=10), 10, byrow=T) ; B <- matrix(rep(1:10, times=10), 10, byrow=T) ;
A <- abs(A-B) ; A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    0    1    2    3    4    5    6    7    8     9
##  [2,]    1    0    1    2    3    4    5    6    7     8
##  [3,]    2    1    0    1    2    3    4    5    6     7
##  [4,]    3    2    1    0    1    2    3    4    5     6
##  [5,]    4    3    2    1    0    1    2    3    4     5
##  [6,]    5    4    3    2    1    0    1    2    3     4
##  [7,]    6    5    4    3    2    1    0    1    2     3
##  [8,]    7    6    5    4    3    2    1    0    1     2
##  [9,]    8    7    6    5    4    3    2    1    0     1
## [10,]    9    8    7    6    5    4    3    2    1     0
Diagonal <- c() # initialization
for(i in 1:10){
    Diagonal <- c(Diagonal, A[i,i])
}
A <- matrix(0, 10, 10) ; for (i in 1:10) A[i,i] <- Diagonal[i] ; A # returns the diagonal matrix of A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    0    0    0    0    0    0    0    0    0     0
##  [2,]    0    0    0    0    0    0    0    0    0     0
##  [3,]    0    0    0    0    0    0    0    0    0     0
##  [4,]    0    0    0    0    0    0    0    0    0     0
##  [5,]    0    0    0    0    0    0    0    0    0     0
##  [6,]    0    0    0    0    0    0    0    0    0     0
##  [7,]    0    0    0    0    0    0    0    0    0     0
##  [8,]    0    0    0    0    0    0    0    0    0     0
##  [9,]    0    0    0    0    0    0    0    0    0     0
## [10,]    0    0    0    0    0    0    0    0    0     0
# an alternative way to get the diagonal matrix of A using diag() function
A <- matrix(0, 10, 10) ; for (i in 1:10) A[i,i] <- diag(A)[i] ; A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    0    0    0    0    0    0    0    0    0     0
##  [2,]    0    0    0    0    0    0    0    0    0     0
##  [3,]    0    0    0    0    0    0    0    0    0     0
##  [4,]    0    0    0    0    0    0    0    0    0     0
##  [5,]    0    0    0    0    0    0    0    0    0     0
##  [6,]    0    0    0    0    0    0    0    0    0     0
##  [7,]    0    0    0    0    0    0    0    0    0     0
##  [8,]    0    0    0    0    0    0    0    0    0     0
##  [9,]    0    0    0    0    0    0    0    0    0     0
## [10,]    0    0    0    0    0    0    0    0    0     0
# Exercise 3

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

A <- matrix(1:100, 10, 10, byrow = T) ; B <- A*2 ; B # shows B
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    2    4    6    8   10   12   14   16   18    20
##  [2,]   22   24   26   28   30   32   34   36   38    40
##  [3,]   42   44   46   48   50   52   54   56   58    60
##  [4,]   62   64   66   68   70   72   74   76   78    80
##  [5,]   82   84   86   88   90   92   94   96   98   100
##  [6,]  102  104  106  108  110  112  114  116  118   120
##  [7,]  122  124  126  128  130  132  134  136  138   140
##  [8,]  142  144  146  148  150  152  154  156  158   160
##  [9,]  162  164  166  168  170  172  174  176  178   180
## [10,]  182  184  186  188  190  192  194  196  198   200
C <- matrix(1:100, ncol=10); for (i in 1:10) for (j in 1:10) C[i,j] <- i*j*A[i,j] ; C # shows C
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    1    4    9   16   25   36   49   64   81   100
##  [2,]   22   48   78  112  150  192  238  288  342   400
##  [3,]   63  132  207  288  375  468  567  672  783   900
##  [4,]  124  256  396  544  700  864 1036 1216 1404  1600
##  [5,]  205  420  645  880 1125 1380 1645 1920 2205  2500
##  [6,]  306  624  954 1296 1650 2016 2394 2784 3186  3600
##  [7,]  427  868 1323 1792 2275 2772 3283 3808 4347  4900
##  [8,]  568 1152 1752 2368 3000 3648 4312 4992 5688  6400
##  [9,]  729 1476 2241 3024 3825 4644 5481 6336 7209  8100
## [10,]  910 1840 2790 3760 4750 5760 6790 7840 8910 10000
# alternative, better way
C <- matrix(rep(1:10, times=10), 10) ; D <- matrix(rep(1:10, each=10), 10) ;
C <- C*D*A ; C
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    1    4    9   16   25   36   49   64   81   100
##  [2,]   22   48   78  112  150  192  238  288  342   400
##  [3,]   63  132  207  288  375  468  567  672  783   900
##  [4,]  124  256  396  544  700  864 1036 1216 1404  1600
##  [5,]  205  420  645  880 1125 1380 1645 1920 2205  2500
##  [6,]  306  624  954 1296 1650 2016 2394 2784 3186  3600
##  [7,]  427  868 1323 1792 2275 2772 3283 3808 4347  4900
##  [8,]  568 1152 1752 2368 3000 3648 4312 4992 5688  6400
##  [9,]  729 1476 2241 3024 3825 4644 5481 6336 7209  8100
## [10,]  910 1840 2790 3760 4750 5760 6790 7840 8910 10000
# Exercise 5

l1 <- lapply(1:10, function(x){1:10}) ; l1 # returns the list
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[2]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[3]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[4]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[5]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[6]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[7]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[8]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[9]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[10]]
##  [1]  1  2  3  4  5  6  7  8  9 10
# Exercise 6

l1 <- lapply(1:10, function(x){1:10}) ; A <- matrix(unlist(l1), 10, 10, byrow=T) ; A # displays A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    1    2    3    4    5    6    7    8    9    10
##  [2,]    1    2    3    4    5    6    7    8    9    10
##  [3,]    1    2    3    4    5    6    7    8    9    10
##  [4,]    1    2    3    4    5    6    7    8    9    10
##  [5,]    1    2    3    4    5    6    7    8    9    10
##  [6,]    1    2    3    4    5    6    7    8    9    10
##  [7,]    1    2    3    4    5    6    7    8    9    10
##  [8,]    1    2    3    4    5    6    7    8    9    10
##  [9,]    1    2    3    4    5    6    7    8    9    10
## [10,]    1    2    3    4    5    6    7    8    9    10
# Exercise 7

l2 <- lapply(1:10, function(y){1:10}) ; A <- matrix(unlist(l2), 10, 10) ; A # shows A
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    1    1    1    1    1    1    1    1    1     1
##  [2,]    2    2    2    2    2    2    2    2    2     2
##  [3,]    3    3    3    3    3    3    3    3    3     3
##  [4,]    4    4    4    4    4    4    4    4    4     4
##  [5,]    5    5    5    5    5    5    5    5    5     5
##  [6,]    6    6    6    6    6    6    6    6    6     6
##  [7,]    7    7    7    7    7    7    7    7    7     7
##  [8,]    8    8    8    8    8    8    8    8    8     8
##  [9,]    9    9    9    9    9    9    9    9    9     9
## [10,]   10   10   10   10   10   10   10   10   10    10