Заполните пустую матрицу матрицей, используя перекрытие в R - PullRequest
0 голосов
/ 27 апреля 2020

Я бы хотел вставить из i = 1 в i = N небольшую матрицу l в большую пустую m. Я хотел бы вставить матрицу l с пробелом в 1 столбец и 1 строку и переписать там, где она перекрывается. enter image description here

Вот мой код:

ncol <- 12
G <- 3
m = matrix(, nrow = ncol, ncol = ncol)
l <- matrix(1:(G*G), nrow = G, ncol = G)
N <- ncol-(G)

for (i in (0:(N))) {
  for(j in (0:(N))){
  m[c(i+1, i+G), c(j+1, j+G)] <- l
  }
}

У меня появляется следующее сообщение об ошибке

Error in m[c(i + 1, i + G), c(j + 1, j + G)] <- l : 
  number of items to replace is not a multiple of replacement length

Когда я использую G = 2, это хорошо, почему?

1 Ответ

0 голосов
/ 27 апреля 2020

Мы можем использовать replicate:

do.call(cbind,replicate(ncol/2, matrix(1:4, nrow = 2,ncol = 2),simplify = FALSE))

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    1    3    1    3    1    3    1    3    1     3
#[2,]    2    4    2    4    2    4    2    4    2     4

Для использования for l oop мы можем сделать:

ncol <- 10
m = matrix(, nrow = 2, ncol = ncol)
l <- matrix(1:4, nrow = 2, ncol = 2)
N <- ncol/2

for (i in (0:(N-1))) {
   j <- i * 2
   m[, c(j+1, j+2)] <- l
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...