R массив - подмножество с фиктивным одиночным измерением - PullRequest
2 голосов
/ 15 февраля 2012

Я написал ряд функций для массивов в R, которые относятся к типу обработки изображений.

Это означает, что функции работают на:

  • Массив 3 на массив (цвет) или
  • массив n на m (на 1) (в оттенках серого).

Дело в том, что полутоновые изображения двумерные: dim(ary) - это c(n,m). Напротив, цветные изображения являются трехмерными: dim(ary) - c(n,m,3).

На данный момент все мои функции имеют что-то вроде (следующий пример придуман, но демонстрирует мою проблему):

f <- function(img)
{
    if ( length(dim(img)) == 2 )
        return( img[1:10,] )
    else
        return( img[1:10,,] )   # Note the extra comma to select all 3D slices?
} 

То есть мне всегда нужно включать проверку, чтобы сказать: «Если это двумерный массив, не вставляйте лишнюю запятую, которая указывает« все в третьем измерении »».

Есть ли способ, которым я могу обойти это? Поскольку двумерный массив на самом деле является трехмерным массивом с dim(ary) = c(n,m,1), было бы здорово использовать один и тот же синтаксис поднабора для обоих.

Есть ли какой-то способ, которым я могу сказать R "если я добавлю слишком много запятых в индексации, вы должны предположить, что это одноэлементное измерение"?

(Полагаю, я мог бы изменить себя через dim(img) <- c(dim(img),1), но для этого все еще требуется, чтобы я проверил это length(dim(img))==2, и я хотел бы знать, есть ли возможность избежать этой проверки в начале каждой функции.

1 Ответ

1 голос
/ 15 февраля 2012

Один из подходов состоит в том, чтобы поместить класс на ваши объекты - серый или цветной - и тогда функция подписки для «серых» объектов может просто игнорировать последнее измерение. [ метод для цветных объектов даже не должен существовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...