создание матрицы с вложенным циклом for - PullRequest
0 голосов
/ 09 февраля 2020

Это практический вопрос для подготовки к экзамену. Мне дают следующий код:

     W=matrix(1:16,byrow=T,ncol=4)
print(W)

fmat=function(W){
n=nrow(W)

      for (i in 1:n){
      for (j in 1:n){
        W[j,i]=W[i,j]+W[j,i]
      }
      }

      return(W)
}

print(fmat(W))

Мы должны «запустить» код на бумаге, а затем проверить наши ответы, запустив код в R. Я выписал правильную матрицу для W, но получил fmat (W) неправильно. R дает мне следующий вывод для fmat (W):

     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24   30
[3,]   12   17   22   39
[4,]   17   22   27   32

, где я записал, что fmat (W) будет равен:

     [,1] [,2] [,3] [,4]
[1,]    2    7   12   17
[2,]    7   12   17   22
[3,]   12   17   22   27
[4,]   17   22   27   32

Что именно здесь происходит? Я интерпретировал функцию для вычисления, например, w [2,1] = w [1,2] + w [2,1], что составляет 2 + 5 = 7.

1 Ответ

0 голосов
/ 09 февраля 2020

В вашем коде W перезаписывается в вашем вложенном for l oop столбцами, а затем строками.

Чтобы визуализировать прогресс, вы можете добавить print(W) перед присвоением значения W[j,i] = W[i,j]+W[j,i], то есть

fmat=function(W){
  n=nrow(W)
  for (i in 1:n){
    for (j in 1:n){
      print(W)
      W[j,i]=W[i,j]+W[j,i]
    }
  }
  return(W)
}

, чтобы

> fmat(W)
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    2    3    4
[2,]    7    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    2    3    4
[2,]    7    6    7    8
[3,]   12   10   11   12
[4,]   13   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    2    3    4
[2,]    7    6    7    8
[3,]   12   10   11   12
[4,]   17   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9    3    4
[2,]    7    6    7    8
[3,]   12   10   11   12
[4,]   17   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9    3    4
[2,]    7   12    7    8
[3,]   12   10   11   12
[4,]   17   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9    3    4
[2,]    7   12    7    8
[3,]   12   17   11   12
[4,]   17   14   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9    3    4
[2,]    7   12    7    8
[3,]   12   17   11   12
[4,]   17   22   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15    4
[2,]    7   12    7    8
[3,]   12   17   11   12
[4,]   17   22   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15    4
[2,]    7   12   24    8
[3,]   12   17   11   12
[4,]   17   22   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15    4
[2,]    7   12   24    8
[3,]   12   17   22   12
[4,]   17   22   15   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15    4
[2,]    7   12   24    8
[3,]   12   17   22   12
[4,]   17   22   27   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24    8
[3,]   12   17   22   12
[4,]   17   22   27   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24   30
[3,]   12   17   22   12
[4,]   17   22   27   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24   30
[3,]   12   17   22   39
[4,]   17   22   27   16
     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24   30
[3,]   12   17   22   39
[4,]   17   22   27   32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...