У меня есть это поле:
![enter image description here](https://i.stack.imgur.com/2JoAH.png)
Я хочу получить все потенциальные исключения из этого поля. Но есть ограничение: делинация должна состоять только из соседних кварталов. Это означает, что у нас не может быть деления на 1-4 квартал и 2-3 квартал. Количество потенциальных делений определяется по формуле:
| N | = $$ (\ sum_ {i = 1} ^ {Width-MinWidth + 1} i) (\ sum_ {i = 1} ^ {Length-MinLength + 1} i) $$,
где Width равна ширине поля, длина равна длине поля (в этом случае оба равны 2), MinWidth равняется минимальной ширине зоны, а MinLength равняется минимальной длине зоны (в этом случае они могут быть 1 или 2 ).
Итак, если MinWidth = 1 и MinLength = 1, в этом примере | N | = 9.
Я бы хотел иметь прямоугольные angular зоны этого поля в соответствующей матрице. Эта соответствующая матрица для этого примера должна выглядеть следующим образом:
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1
[5,] 1 1 0 0
[6,] 0 0 1 1
[7,] 1 0 1 0
[8,] 0 1 0 1
[9,] 1 1 1 1
Интерпретация этой матрицы состоит в том, что первое разделение состоит только из 1-го квартала (и 2,3,4 вместе), второго разделение состоит только из 2-го квартала (и 1,3,4 вместе), ..., пятый разделение состоит из 1-го и 2-го квартала (и 3,4 вместе), и так продолжается. Матрица для поля 3x3 будет представлять собой матрицу 36x9, аналогичную приведенной выше.
Мне удалось построить al oop, который вычисляет | N | раз (число потенциальных границ), код приведен ниже:
z <- 0
for (j in MinWidth:Width) {
for (l in 0:(Width - 1)) {
if ((j + l) <= Width) {
for (i in MinLength:Length) {
for (k in 0:(Length-1)) {
if ((k + i) <= Length) {
z <- z + 1
}
}
}
}
}
}
Что делает этот l oop:
Требуется четверти, а затем проверяется, остались ли пространство, сначала по ширине, а затем по длине, чтобы создать зону. j обозначает ширину, l обозначает оставшуюся доступную ширину, i обозначает длину и k обозначает оставшуюся доступную длину. Но я не могу получить правильные строки матрицы для каждого l oop.
Есть ли какие-либо иды, как я могу сделать это в R?