2013-05-14 4 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 

Просто делать Matrix1% *% Matrix2 не дает то, что я хочу для элемента в строке 2, столбец 3 (она дает NA, что имеет смысл, но не уверен как делать то, что я хотел бы сделать). Для моих целей Matrix 2 никогда не будет иметь значений NA, если это что-то изменит.

+0

Я ожидал найти 'inner' функцию, чтобы соответствовать' outer' Функции R, что позволяет вам написать свои собственные операции как это. О, хорошо, похоже, этого не существует. Интересно, почему. – 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 для представления «ничего». – rbatt