我有一个目录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填充所有内容。
答案 0 :(得分:1)
您不需要知道每个小矩阵的元素,只需创建填充了1和维AT&T
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")
但是,我想知道是否有更有效的方法。谢谢。