0

基本的なマトリックスがあり、100回繰り返されるmatRオブジェクトを取得したいと考えています。これが可能であれば、行列名のベクトルを受け取る関数に渡すことができます。試してみましたが、マトリックスクラスはもう維持されていないようです。助言がありますか?ありがとう!x = (mat, mat, ...)matxrep(mat, 100)

更新:基本的に私は使用する予定です

grp.ids <- as.factor(c(rep(1,8), rep(2,4), rep(3,2)))
x <- model.matrix(~grp.ids)
do.call(blockMatrixDiagonal,
             replicate(100, x, simplify=FALSE))

blockMatrixDiagonal関数はここにあります。次に、R はエラーを返します: 置換するアイテムの数が置換長の倍数ではありません。これらのコーディングを通じて得たいと本当に思っているのは、ブロック対角行列です。ありがとう :)

4

2 に答える 2

2

入力行列は正方行列ではないため(つまり、行数が列数に等しい) 、ブロック対角行列の作成には適していません。

ブロック対角行列に関する 2 つのリソースを挙げましょう。

1)ウィキペディア:

ブロック対角行列は、正方行列であるブロック行列であり、主な対角ブロック正方行列を持ちます

2) 機能の説明blockMatrixDiagonal:

対角線が提供された正方行列であるブロック行列を構築します。


非正方行列をadiagパッケージの関数と組み合わせることができますmagic。あなたのマトリックスでx

library(magic)
do.call(adiag, replicate(100, x, simplify = FALSE))
于 2012-10-25T09:42:30.583 に答える
2

基本的な R ソリューションについては、こちらをご覧くださいkronecker

?kronecker
# For your block diagonal matrix:
kronecker(diag(1, 100), x)
# or with `%x%` alias
diag(1, 100) %x% x

# example 1
m <- matrix(1:6, nrow = 3)
kronecker(diag(1, 2), m)
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    0    0
# [2,]    2    5    0    0
# [3,]    3    6    0    0
# [4,]    0    0    1    4
# [5,]    0    0    2    5
# [6,]    0    0    3    6

# example 2
matrix(1, nrow = 2, ncol = 3) %x% m
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    4    1    4    1    4
# [2,]    2    5    2    5    2    5
# [3,]    3    6    3    6    3    6
# [4,]    1    4    1    4    1    4
# [5,]    2    5    2    5    2    5
# [6,]    3    6    3    6    3    6
于 2014-10-11T22:24:08.297 に答える