R 组合矩阵和DIM名称
我是一个初学者,我试着把一系列矩阵和一系列DIMNAME结合起来,得到一组排列。我选择通过expand.grid构建一些东西,每个子集包含一个矩阵和一个dimnameR 组合矩阵和DIM名称,r,matrix,permutation,R,Matrix,Permutation,我是一个初学者,我试着把一系列矩阵和一系列DIMNAME结合起来,得到一组排列。我选择通过expand.grid构建一些东西,每个子集包含一个矩阵和一个dimname M1=matrix(c(0,1,0,1,0,0,0,0,1), nrow=3,ncol=3,byrow=T) M2=matrix(c(0,0,1,0,1,0,1,0,0), nrow=3,ncol=3,byrow=T) Mlist<-list(M1,M2) Na<-list(c("A","B","C"),c("A",
M1=matrix(c(0,1,0,1,0,0,0,0,1), nrow=3,ncol=3,byrow=T)
M2=matrix(c(0,0,1,0,1,0,1,0,0), nrow=3,ncol=3,byrow=T)
Mlist<-list(M1,M2)
Na<-list(c("A","B","C"),c("A","B","C"))
Nb<-list(c("B","A","C"),c("B","A","C"))
Nlist<-list(Na,Nb)
M<-expand.grid(Nlist,Mlist)
我找不到的是如何设置一个变量,该变量将在每一步递增,如这里的x:
Mat<-matrix(M[[2]][[x]],dimnames=list(M[[1]][[x]][[1]],M[[1]][[x]][[2]]),nrow=3,ncol=3,byrow=T)
Mat您走在正确的轨道上:
“我找不到的是如何设置一个变量,该变量在每一步都会递增,这里类似于x”
您可以使用lappy
获得所需的输出:
lapply(1:4, function(x) {
matrix(M[[2]][[x]],dimnames=list(M[[1]][[x]][[1]],M[[1]][[x]][[2]]),nrow=3,ncol=3,byrow=T)
})
[[1]]
A B C
A 0 1 0
B 1 0 0
C 0 0 1
[[2]]
B A C
B 0 1 0
A 1 0 0
C 0 0 1
[[3]]
A B C
A 0 0 1
B 0 1 0
C 1 0 0
[[4]]
B A C
B 0 0 1
A 0 1 0
C 1 0 0
下面是一个5x5
矩阵的示例。首先,我们要进行设置:
M1 <- matrix(0, nrow=5,ncol=5)
diag(M1) <- 1L
M2 <- matrix(0, nrow=5,ncol=5)
j <- 5L
for (i in 1:5) {
M2[i, j] <- 1L
j <- j - 1L
}
Mlist<-list(M1,M2)
Na<-list(LETTERS[1:5], LETTERS[1:5])
Nb<-list(LETTERS[c(2,1,3:5)], LETTERS[c(2,1,3:5)])
Nlist<-list(Na,Nb)
M<-expand.grid(Nlist,Mlist)
感谢约瑟夫找到了原则。它适用于5*5矩阵和2*2置换。只需要一点加法,它就可以扩展到我真正的东西,大约是5*5矩阵的8*10排列。唯一需要做的事情是在应用expand.grid之前转置矩阵
#J Wood solution with my 10 nodes and 8 matrices
M1<-matrix(c(0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M2<-matrix(c(0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M3<-matrix(c(0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M4<-matrix(c(0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M5<-matrix(c(0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M6<-matrix(c(0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M7<-matrix(c(0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M8<-matrix(c(0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
tMlist<-list(t(M1),t(M2),t(M3),t(M4),t(M5),t(M6),t(M7),t(M8))
N1<-list(c("A","B","C","D","E"),c("A","B","C","D","E"))
N2<-list(c("A","B","D","C","E"),c("A","B","D","C","E"))
N3<-list(c("A","B","E","C","D"),c("A","B","E","C","D"))
N4<-list(c("A","C","D","B","E"),c("A","C","D","B","E"))
N5<-list(c("A","C","E","B","D"),c("A","C","E","B","D"))
N6<-list(c("A","D","E","B","C"),c("A","D","E","B","C"))
N7<-list(c("B","C","D","A","E"),c("B","C","D","A","E"))
N8<-list(c("B","C","E","A","D"),c("B","C","E","A","D"))
N9<-list(c("B","D","E","A","C"),c("B","D","E","A","C"))
N10<-list(c("C","D","E","A","B"),c("C","D","E","A","B"))
Nlist<-list(N1,N2,N3,N4,N5,N6,N7,N8,N8,N10)
M<-expand.grid(Nlist,tMlist)
lapply(1:80, function(x) {
matrix(M[[2]][[x]],dimnames=list(M[[1]][[x]][[1]],M[[1]][[x]][[2]]),nrow=5,ncol=5,byrow=T)
})
[[1]]
A B C D E
A 0 1 0 0 0
B 0 0 1 0 0
C 1 0 0 0 0
D 0 0 0 0 0
E 0 0 0 0 0
[[2]]
A B D C E
A 0 1 0 0 0
B 0 0 1 0 0
D 1 0 0 0 0
C 0 0 0 0 0
E 0 0 0 0 0
.....
[[80]]
C D E A B
C 0 1 0 0 0
D 0 0 0 0 0
E 1 1 0 0 0
A 0 0 0 0 0
B 0 0 0 0 0
#J我的10个节点和8个矩阵的Wood解决方案
就是这么简单!非常感谢。你救了我一天(一周)!但是,expand.grid和5x5矩阵会产生意想不到的结果:有些矩阵不在输入中,有些丢失,有些重复。@PhilippeRamirez,给我一点时间,我会看看我能做些什么。@PhilippeRamirez,这有帮助吗?谢谢Joseph,但我想我找到了pb:在输入中,而不是矩阵中,我只尝试了列表,扩展网格运行正常。现在让我看看申请步骤非常好!!我很高兴你成功了。apply函数系列真的很棒。
M1 <- matrix(0, nrow=5,ncol=5)
diag(M1) <- 1L
M2 <- matrix(0, nrow=5,ncol=5)
j <- 5L
for (i in 1:5) {
M2[i, j] <- 1L
j <- j - 1L
}
Mlist<-list(M1,M2)
Na<-list(LETTERS[1:5], LETTERS[1:5])
Nb<-list(LETTERS[c(2,1,3:5)], LETTERS[c(2,1,3:5)])
Nlist<-list(Na,Nb)
M<-expand.grid(Nlist,Mlist)
lapply(1:4, function(x) {
matrix(M[[2]][[x]],dimnames=list(M[[1]][[x]][[1]],M[[1]][[x]][[2]]),nrow=5,ncol=5,byrow=T)
})
[[1]]
A B C D E
A 1 0 0 0 0
B 0 1 0 0 0
C 0 0 1 0 0
D 0 0 0 1 0
E 0 0 0 0 1
[[2]]
B A C D E
B 1 0 0 0 0
A 0 1 0 0 0
C 0 0 1 0 0
D 0 0 0 1 0
E 0 0 0 0 1
[[3]]
A B C D E
A 0 0 0 0 1
B 0 0 0 1 0
C 0 0 1 0 0
D 0 1 0 0 0
E 1 0 0 0 0
[[4]]
B A C D E
B 0 0 0 0 1
A 0 0 0 1 0
C 0 0 1 0 0
D 0 1 0 0 0
E 1 0 0 0 0
#J Wood solution with my 10 nodes and 8 matrices
M1<-matrix(c(0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M2<-matrix(c(0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M3<-matrix(c(0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M4<-matrix(c(0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M5<-matrix(c(0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M6<-matrix(c(0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M7<-matrix(c(0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
M8<-matrix(c(0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5,ncol=5,byrow=T)
tMlist<-list(t(M1),t(M2),t(M3),t(M4),t(M5),t(M6),t(M7),t(M8))
N1<-list(c("A","B","C","D","E"),c("A","B","C","D","E"))
N2<-list(c("A","B","D","C","E"),c("A","B","D","C","E"))
N3<-list(c("A","B","E","C","D"),c("A","B","E","C","D"))
N4<-list(c("A","C","D","B","E"),c("A","C","D","B","E"))
N5<-list(c("A","C","E","B","D"),c("A","C","E","B","D"))
N6<-list(c("A","D","E","B","C"),c("A","D","E","B","C"))
N7<-list(c("B","C","D","A","E"),c("B","C","D","A","E"))
N8<-list(c("B","C","E","A","D"),c("B","C","E","A","D"))
N9<-list(c("B","D","E","A","C"),c("B","D","E","A","C"))
N10<-list(c("C","D","E","A","B"),c("C","D","E","A","B"))
Nlist<-list(N1,N2,N3,N4,N5,N6,N7,N8,N8,N10)
M<-expand.grid(Nlist,tMlist)
lapply(1:80, function(x) {
matrix(M[[2]][[x]],dimnames=list(M[[1]][[x]][[1]],M[[1]][[x]][[2]]),nrow=5,ncol=5,byrow=T)
})
[[1]]
A B C D E
A 0 1 0 0 0
B 0 0 1 0 0
C 1 0 0 0 0
D 0 0 0 0 0
E 0 0 0 0 0
[[2]]
A B D C E
A 0 1 0 0 0
B 0 0 1 0 0
D 1 0 0 0 0
C 0 0 0 0 0
E 0 0 0 0 0
.....
[[80]]
C D E A B
C 0 1 0 0 0
D 0 0 0 0 0
E 1 1 0 0 0
A 0 0 0 0 0
B 0 0 0 0 0