2013-11-26 2 views
4

Я пытаюсь применить уравнение к двум матрицам. Поскольку я являюсь новичком R, мне это кажется очень трудным. Было бы здорово, если бы вы могли дать мне несколько советов.R: вычитание элементов матрицы из элементов другой матрицы

У меня есть две матрицы подобия:

> r 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 4 2 2 5 5 
[2,] 4 0 8 3 3 2 
[3,] 2 8 0 4 4 3 
[4,] 2 3 4 0 0 3 
[5,] 5 3 4 0 0 5 
[6,] 5 2 3 3 5 0 

> nr 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 4 7 2 4 3 
[2,] 4 0 5 2 3 2 
[3,] 7 5 0 3 2 2 
[4,] 2 2 3 0 7 2 
[5,] 4 3 2 7 0 5 
[6,] 3 2 2 2 5 0 

И я wolud бы применить к ним следующее:

sum((r[i,j]-nr[i,j])^2)/6 

Моя большая проблема заключается в извлечении элементов nr из элементов r. Если я заменяю nr[i,j] с номером, например 0.4 затем следующие работы прекрасно:

s<-numeric() 
for (i in 1:nrow(r)) 
{ 
    for (j in 1:ncol(r)) 
{ 
    s[k]<-sum((r[i,j]-0.4)^2)/6 
} 
} 
> s 
[1] 0.02666667 

Но я не могу понять, как я мог бы изменить этот код, чтобы решить исходную задачу. Буду признателен за любую помощь/предложение. Спасибо!

+4

Вы пробовали просто 'sum ((r-nr)^2)/6'? – mrip

+0

Нет, не знаю. Я не думал, что это может быть так просто. Спасибо! – Sielu

ответ

7

нормальные операторы, такие как +, -, *, / и ^ делать мудрые операции элемента. Так просто (r - nr)^2/6 сделают трюк для вас.

r 
##  [,1] [,2] [,3] 
## [1,] 2 2 2 
## [2,] 2 2 2 
## [3,] 2 2 2 

nr 
##  [,1] [,2] [,3] 
## [1,] 3 3 3 
## [2,] 3 3 3 
## [3,] 3 3 3 


r * nr 
##  [,1] [,2] [,3] 
## [1,] 6 6 6 
## [2,] 6 6 6 
## [3,] 6 6 6 


r - nr 
##  [,1] [,2] [,3] 
## [1,] -1 -1 -1 
## [2,] -1 -1 -1 
## [3,] -1 -1 -1 


(r - nr)^2/6 
##   [,1]  [,2]  [,3] 
## [1,] 0.1666667 0.1666667 0.1666667 
## [2,] 0.1666667 0.1666667 0.1666667 
## [3,] 0.1666667 0.1666667 0.1666667 
+0

Я понятия не имел, эти операторы могут быть применены и к матрицам. Спасибо огромное! :) – Sielu