2013-07-16 2 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)를 만들려고합니다. 예 : 그것은 다음과 같아야합니다 myMatrixSizes 나는 R에서이 작업을 수행 할 수있는 방법

:

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 

내가 다른 목록의 각 행렬의 크기가?

나는이 시도했지만, 결과는 내가 원하는 모양에없는 :

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