Insists that input matrix is square. Uses the 'diagonal'
attribute when available and has specialised handling of ff
,
big.matrix
, dgCMatrix
matrices. Does not check that row and
column names are identical for those matrix classes (unlike the base
diag
function, but always uses rownames.