从R中的较小矩阵生成大矩阵

时间:2015-09-24 16:02:31

标签: r matrix

我有一个目录matrix,其中包含一系列0和1的不同大小的文本文件矩阵,如下所示:

txt.1
0 1 0
1 1 1
0 0 1
txt.2
1 1 0
0 1 1
txt.3
1 1 1 1
0 1 0 1
0 0 0 0

我正在尝试从这些较小的矩阵中创建一个更大的对角矩阵,用0替换较小矩阵中的所有值,并用1s填充对角线中的空白空间,以便最终结果如下:

print(bigmatrix)
0 0 0 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
1 1 1 0 0 0 1 1 1 1
1 1 1 0 0 0 1 1 1 1
1 1 1 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0 0

有没有办法在这里使用bdiag或其他功能?我只能让bigdiag用0填充所有内容。

2 个答案:

答案 0 :(得分:1)

您不需要知道每个小矩阵的元素,只需创建填充了1和维AT&T

的N个矩阵
max(dim(mx))

结果:

m1 = matrix(1,3,3)
m2 = matrix(1,3,3)
m3 = matrix(1,4,4)

lst = list(m1,m2,m3)
print(lst)
m0 = as.matrix(bdiag(lst))
m0 = ifelse(m0 == 0, 1, 0)
View(m0)

答案 1 :(得分:0)

此方法有效:

library(Matrix)
library(MASS)
structural0<-lapply(dir(), function(x){as.matrix(read.table(x))})
structural0<-lapply(structural0,function(x){ifelse(x==0,1,1)})
structural0<-bdiag(structural0)
write.matrix(structural0, file="structural0.txt")
structural0a<-as.matrix(read.table("structural0.txt"))
structural0a<-ifelse(structural0a==0,1,0)
write.matrix(structural0a, file="structural0a.txt")

但是,我想知道是否有更有效的方法。谢谢。