R 组合矩阵和DIM名称

R 组合矩阵和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",

我是一个初学者,我试着把一系列矩阵和一系列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","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