2014-10-23 3 views
1

나는 유전자 (n = 2000)의 표현 값과 마이크로 RNA (n = 350)의 표현 값을 포함하는 두 개의 데이터 프레임을 가지고있다. 각 유전자와 각 마이크로 RNA의 비율을 계산하고 시각화하고 싶습니다.두 데이터 프레임의 쌍 비율을 포함하는 행렬을 만드는 방법은 무엇입니까?

가 처음

m <- as.data.frame(matrix(0, ncol = 350, nrow = 2000)) 

세 개의 데이터 프레임 m 있습니다 빈 데이터 프레임 (2000, 350) control.mRNA 만든 (2000, 1) : 여기

내가 뭐하는 거지입니다 control.miRNA (350, 1).

은 지금은 서로 자신의 비율을 계산하고 빈 dataframe

for (i in 1:nrow(control.mRNA)) { 
    for (j in 1:nrow(control.miRNA)) { 
    m[i,j] <- control.miRNA[j]/control.mRNA[i] 
    } 
} 

에 값을 작성하지만이 작동하지 않습니다하고 있습니다. 곱셈에는 "crossprod"기능이 있지만 나눗셈을 위해 아무 것도 찾지 못했습니다.

+1

벡터로 변환 한 후 사용하는 '외측 (control.mRNA, control.miRNA를'/ ')'' – shadow

+0

경우 control.mRNA'과'control.miRNA' 행렬이 아니라 데이터 프레임이라면, 코드를 수정할 필요가있다 : m [i, j] <- control.miRNA [j, 1] /control.mRNA [i, 1]'. –

답변

1

outer을 사용할 수 있습니다.

u <- 1:5 
v <- c(3,7) 

outer(u, v, "/") 

결과는 5 행렬 행 i의 계수 u[i]/v[j]있는 행과 2 (v에 coefs의 #) 컬럼 (u에 coefs의 #) 인 : 여기 간체 (동을하게되는지 정확한) 예 예이다 및 col j.

M1 <- t(outer(u, v, "/")) 

신중 outer 인수로 벡터를 취 지적 @shadow, 그리고 행렬 : 행 i 및 COL j에서 u[j]/v[i]을하려면 다음, 전치 연산자를 t를 사용할 수 있습니다. 이는 행렬을 벡터로 먼저 변환하여 쉽게 처리 할 수 ​​있습니다.

의 이전과 동일한 예를 보자 있지만 단지 UV 두 행렬 대신에 벡터 :

U <- matrix(1:5) 
V <- matrix(c(3,7)) 
M2 <- t(outer(drop(U), drop(V), "/")) 

다른 용액 UV 조금 변환 매트릭스 곱셈 연산자 %*%을 사용하는 것이다 :

M3 <- t(U %*% t(1/V)) 
관련 문제