2013-05-14 23 views
4

R에 두 행렬을 곱하면 그 중 하나에는 임의로 배치 된 NA 값이 포함될 수 있습니다 (즉, 모든 행 또는 열에있을 이유는 없습니다). 원하는 아래의 예와 같이 출력 :흩어져있는 NA 값을 가진 행렬 곱셈

Matrix 1 
[1,]  33  45 50 
[2,]  NA  NA 54 

Matrix 2 
[1,] A1    0.0000000  0.0000000 
[2,] 0.0000000  A2    0.0000000 
[3,] 0.0000000  0.0000000   A3 


Result 
[1,]  33*A1  45*A2   50*A3 
[2,]  NA  NA  (NA*0 +NA*0 +54*A3)=54*A3 

간단하게하고 행렬 1의 %의 * %의 행렬 2 내가 행 2의 요소에 대해 원하는 것을 제공하지 않습니다, 3 열 (이 의미가 없음을 제공하지만, 확실하지 내가하고 싶은 일을하는 법). 내 목적에 따라 Matrix 2는 NA 값을 가지지 않습니다.

+0

난 당신이 자신 만의 쓰기 작업을 할 수 있도록 R의'outer' 기능과 일치하는'inner' 기능을 찾기 위해 기다리고 있었다 이렇게. 아 글쎄, 존재하지 않는 것처럼 보입니다. 이유가 궁금합니다. – Frank

답변

7

변경 NA 0의 모든 항목은 다음 행렬 곱셈을 수행

x <- matrix(c(33, 45, 50, NA, NA, 54), nrow=2, byrow=TRUE) 
y <- diag(1:3) 


x[is.na(x)] <- 0 

x %*% y 
    [,1] [,2] [,3] 
[1,] 33 90 150 
[2,] 0 0 162 
+0

유일한 트릭은 그 결과에있는 2 0을 NA로 변환하는 것입니다. 필자의 경우 구별은 exp (0) = 1 인 반면 exp (NA) = NA이다. 로그 스케일에서 작동 할 때, 나는 NA를 사용하여 "nothing"을 나타냅니다. – rbatt