2013-07-16 100 views
0

我想在一个列表(比如myList)中创建两个矩阵(比如说S和P),它们每个都可以取二进制值并且是对角矩阵(T代表TRUE和F代表为FALSE):在R中加入两个矩阵

S: 
S1 S2 
T F 
F T 

P: 
P1 P2 P3 
T F F 
F T F 
F F T 

然后我想创建一个矩阵(或data.frame),可以显示二进制格式这两个变量的所有组合。例如。它应该是这样的:

S1 S2 P1 P2 P3 
T F T F F 
T F F T F 
T F F F T 
F T T F F 
F T F T F 
F T F F T 
F F T F F 
F F F T F 
F F F F T 

我有每个矩阵的另一个列表大小:myMatrixSizes

如何在R中可以做到这一点?

我已经试过这一点,但结果并不在形状,我想:

lapply(
    lapply(
     c(myList), 
     function(y) Diagonal(myMatrixSizes(y,myList)])==1 
), 
    function(x) lapply(x,2, rep, prod(myMatrixSizes)/ dim(x)[1]) 
) 

谢谢!

+1

当获得(2vars * 3vars)的每个组合时,你如何得到9行? – thelatemail

回答

2

也许这样的事情?

S <- data.frame(S1=c(TRUE,FALSE),S2=c(FALSE,TRUE)) 
P <- data.frame(P1=c(TRUE,FALSE,FALSE),P2=c(FALSE,TRUE,FALSE),P3=c(FALSE,FALSE,TRUE)) 

ids <- expand.grid(1:length(S),1:length(P)) 
t(mapply(function(x,y) unlist(c(S[x,],P[y,])) , ids[[1]], ids[[2]])) 

     S1 S2 P1 P2 P3 
[1,] TRUE FALSE TRUE FALSE FALSE 
[2,] FALSE TRUE TRUE FALSE FALSE 
[3,] TRUE FALSE FALSE TRUE FALSE 
[4,] FALSE TRUE FALSE TRUE FALSE 
[5,] TRUE FALSE FALSE FALSE TRUE 
[6,] FALSE TRUE FALSE FALSE TRUE