在矩阵中使用bdiag
. 请注意,Matrix随附R,因此不需要安装.如果您喜欢"dgCMatrix"类的稀疏矩阵,则省略外部as.matrix
.如果已知IO
的组件具有相同的尺寸,则可以省略unlist
(但如果您将其留在其中也不会有什么坏处).
library(Matrix)
m <- as.matrix(do.call(bdiag, lapply(IO, as.matrix)))
rownames(m) <- unlist(sapply(IO, rownames))
colnames(m) <- unlist(sapply(IO, colnames))
m
魔法包中的adiag
也有效:
library(magic)
m <- do.call(adiag, lapply(IO, as.matrix))
rownames(m) <- unlist(sapply(IO, rownames))
colnames(m) <- unlist(sapply(IO, colnames))
m
上述任何一种方法都给出
a1 b1 c1 a2 b2 c2 a3 b3 c3
a1 -0.1513960 1.228208 0.8691008 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.000000
b1 0.3297912 2.286549 1.6003537 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.000000
c1 -3.2273228 0.779488 -0.3278619 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.000000
a2 0.0000000 0.000000 0.0000000 1.2429188 5.403631 0.1442195 0.0000000 0.000000 0.000000
b2 0.0000000 0.000000 0.0000000 -0.9343851 4.113563 -2.1606490 0.0000000 0.000000 0.000000
c2 0.0000000 0.000000 0.0000000 0.3937087 3.681062 8.4493626 0.0000000 0.000000 0.000000
a3 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.0000000 1.2283928 9.479131 16.858872
b3 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.0000000 0.2760235 11.623203 -2.416898
c3 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.0000000 -1.0489755 8.929932 -4.682005
注意
IO <- list(
data.frame(
a1 = c(-0.15139596233578126, 0.3297912007577342, -3.2273228297675036),
b1 = c(1.2282082287538416, 2.286548567354287, 0.7794880176338643),
c1 = c(0.8691007542260557, 1.6003537316708585, -0.32786193728595037),
row.names = c("a1", "b1", "c1")
),
data.frame(
a2 = c(1.2429187749373165, -0.9343850580551597, 0.39370865221579254),
b2 = c(5.403631455697291, 4.113563283583199, 3.6810623964633677),
c2 = c(0.14421954258220337, -2.1606489673566616, 8.449362593227988),
row.names = c("a2", "b2", "c2")
),
data.frame(
a3 = c(1.228392782136422, 0.27602347826588974, -1.0489755044730924),
b3 = c(9.479130656167058, 11.623202521730665, 8.929931770655703),
c3 = c(16.858872442051617, -2.416897677389497, -4.682004786404757),
row.names = c("a3", "b3", "c3")
)
)