У меня есть матрица 18x18 из 1 и 0. Однако у меня есть приведенный ниже код, который добавляет дополнение к матрице, чтобы сделать ее 20x20, а затем проверяет соседей каждого элемента матрицы, если какая-либо матрица имеет все свои соседи, объединенные как 1.
counter = 0
imageNewMatrix <- imageMatrix
nrow(imageMatrix)
ncol(imageMatrix)
imageNewMatrixa <- cbind(imageNewMatrix, 0)
imageNewMatrixB <- rbind(imageNewMatrixa, 0)
imageNewMatrixC <- cbind(imageNewMatrixB, 0)
imageNewMatrixD <- rbind(imageNewMatrixC, 0)
nrow(imageNewMatrixD)
ncol(imageNewMatrixD)
for (row in 1:nrow(imageNewMatrixD)) {
for (col in 1:ncol(imageNewMatrixD)) {
if (imageNewMatrixD[row,col] == 1) {
# Get entry of the left pixel
pixel_to_left = as.numeric(imageNewMatrixD[row, col-1])
# Get entry of the right pixel
pixel_to_right = as.numeric(imageNewMatrixD[row, col+1])
# Get entry of the pixel at top
pixel_at_top = as.numeric(imageNewMatrixD[row-1, col])
# Get entry of the pixel at top-left
pixel_at_top_left = as.numeric(imageNewMatrixD[row-1, col-1])
# Get entry of the pixel at top right
pixel_at_top_right = as.numeric(imageNewMatrixD[row-1, col+1])
# Get entry of the pixel at bottom
pixel_at_bottom = as.numeric(imageNewMatrixD[row+1, col])
# Get entry of the pixel at bottom left
pixel_at_bottom_left = as.numeric(imageNewMatrixD[row+1, col-1])
# Get entry of the pixel at bottom right
pixel_at_bottom_right = as.numeric(imageNewMatrixD[row+1, col+1])
pixel_sum = pixel_to_left + pixel_to_right + pixel_at_top +
pixel_at_top_left + pixel_at_top_right + pixel_at_bottom +
pixel_at_bottom_left + pixel_at_bottom_right
if (as.numeric(pixel_sum == 0)) {
counter = counter + 1
} else {
counter = 0
}
}
}
}
neigh_1 = counter
Всякий раз, когда я пытаюсь запустить этот код, появляется ошибка Error in if (as.numeric(pixel_sum == 0)) { : argument is of length zero
. Может ли кто-нибудь помочь мне с этой ошибкой?
@rawr Сумма пикселей равна numeric(0)
. Также извините, но я не понял вторую часть о начале столбца 1. Можете ли вы объяснить немного больше?
0 + NULL
есть numeric(0)
. вы не можете начать с столбца 1 и идти влево, возможно, вы имели в виду, что ваш цикл проходит через столбцы 2:19 и строки 2:19
@rawr Понял, спасибо за ответ!
Я сделал ошибку, ища столбцы от n до nrow. Вместо этого я использовал столбцы 2:19 и строки 2:19.
Я также использовал isTRUE при проверке, равна ли сумма пикселей 0 или нет.
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
распечатать
pixel_sum
как это выглядит? хотя бы один из ваших пикселей пуст:if (as.numeric({0 + NULL} == 0)) {}
вы начинаете с столбца 1 иcol - 1
; из 1 ряда иrow - 1