2013-07-16 105 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