The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
Fat diagonal matrices occur when we combine two dimensions of a data set along one edge of a matrix. For example, trade-flow data in the decompr and gvc package have each country-industry combination occur on each edge of the matrix.
A fat diagonal matrix looks like this.
library(diagonals)
##
## D I
## A G
## O N
## A L
fatdiag(12, steps=3)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 1 1 1 1 0 0 0 0 0 0 0 0
## [2,] 1 1 1 1 0 0 0 0 0 0 0 0
## [3,] 1 1 1 1 0 0 0 0 0 0 0 0
## [4,] 1 1 1 1 0 0 0 0 0 0 0 0
## [5,] 0 0 0 0 1 1 1 1 0 0 0 0
## [6,] 0 0 0 0 1 1 1 1 0 0 0 0
## [7,] 0 0 0 0 1 1 1 1 0 0 0 0
## [8,] 0 0 0 0 1 1 1 1 0 0 0 0
## [9,] 0 0 0 0 0 0 0 0 1 1 1 1
## [10,] 0 0 0 0 0 0 0 0 1 1 1 1
## [11,] 0 0 0 0 0 0 0 0 1 1 1 1
## [12,] 0 0 0 0 0 0 0 0 1 1 1 1
The workhorse function of this package is the fatdiag
function, which tries behave similarly to the diag
function
from the base
package, but then with diagonals being
fat.
We can also use the function to assign values to the diagonal.
<- matrix(111, nrow=6, ncol=9) ) ( m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 111 111 111 111 111 111 111 111 111
## [2,] 111 111 111 111 111 111 111 111 111
## [3,] 111 111 111 111 111 111 111 111 111
## [4,] 111 111 111 111 111 111 111 111 111
## [5,] 111 111 111 111 111 111 111 111 111
## [6,] 111 111 111 111 111 111 111 111 111
fatdiag(m, steps=3) <- 5
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 5 5 5 111 111 111 111 111 111
## [2,] 5 5 5 111 111 111 111 111 111
## [3,] 111 111 111 5 5 5 111 111 111
## [4,] 111 111 111 5 5 5 111 111 111
## [5,] 111 111 111 111 111 111 5 5 5
## [6,] 111 111 111 111 111 111 5 5 5
As can be seen from the above example, the blocks and matrices do not have to be square.
The diagonal of a matrix can also be extracted.
fatdiag(m, steps=3)
## [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
We can also specify the size of the block in stead of the number of steps.
fatdiag(12, size=4)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 1 1 1 1 0 0 0 0 0 0 0 0
## [2,] 1 1 1 1 0 0 0 0 0 0 0 0
## [3,] 1 1 1 1 0 0 0 0 0 0 0 0
## [4,] 1 1 1 1 0 0 0 0 0 0 0 0
## [5,] 0 0 0 0 1 1 1 1 0 0 0 0
## [6,] 0 0 0 0 1 1 1 1 0 0 0 0
## [7,] 0 0 0 0 1 1 1 1 0 0 0 0
## [8,] 0 0 0 0 1 1 1 1 0 0 0 0
## [9,] 0 0 0 0 0 0 0 0 1 1 1 1
## [10,] 0 0 0 0 0 0 0 0 1 1 1 1
## [11,] 0 0 0 0 0 0 0 0 1 1 1 1
## [12,] 0 0 0 0 0 0 0 0 1 1 1 1
This also gives us flexibility in terms of having non-square blocks (and consequently matrices).
fatdiag(12, size=c(3,4) )
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 1 1 1 1 0 0 0 0 0 0 0 0
## [2,] 1 1 1 1 0 0 0 0 0 0 0 0
## [3,] 1 1 1 1 0 0 0 0 0 0 0 0
## [4,] 0 0 0 0 1 1 1 1 0 0 0 0
## [5,] 0 0 0 0 1 1 1 1 0 0 0 0
## [6,] 0 0 0 0 1 1 1 1 0 0 0 0
## [7,] 0 0 0 0 0 0 0 0 1 1 1 1
## [8,] 0 0 0 0 0 0 0 0 1 1 1 1
## [9,] 0 0 0 0 0 0 0 0 1 1 1 1
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.