2012-10-05 4 views
6

Когда подмножество массивов, R ведет себя по-разному в зависимости от того, имеет ли одно из размеров длина 1 или нет. Если размер имеет длину 1, что измерение теряется при Подменю:Массив подмножества R: размерность теряется, когда его длина равна 1

ax <- array(1:24, c(2,3,4)) 
ay <- array(1:12, c(1,3,4)) 
dim(ax) 
#[1] 2 3 4 
dim(ay) 
#[1] 1 3 4 
dim(ax[,1:2,]) 
#[1] 2 2 4 
dim(ay[,1:2,]) 
#[1] 2 4 

С моей точки зрения, ах и ау имеют то же самое, и выполняет ту же операцию, подмножество, на них должен возвращать массив с теми же размерами , Я вижу, что способ, которым R обрабатывает два случая, может оказаться полезным, но в коде, который я пишу, это нежелательно. Это означает, что когда я передаю подмножество массива в другую функцию, функция получит массив, в котором отсутствует измерение, если мне пришлось уменьшить размер до длины 1 на более раннем этапе. (Так что в этом случае гибкость R делает мой код менее гибким!)

Как я могу предотвратить R потерять измерение длины 1 во время подмножества? Есть ли другой способ индексирования? Какой флаг установлен?

+0

не идентичны, но, возможно, интерес: http://stackoverflow.com/questions/12196724/generally-disable-dimension-dropping-for-matrices –

ответ

14

Как вы обнаружили по умолчанию, R катит ненужные размеры. Добавление drop=FALSE во время индексации может предотвратить это:

> dim(ay[,1:2,]) 
[1] 2 4 
> dim(ax[,1:2,]) 
[1] 2 2 4 
> dim(ay[,1:2,,drop = F]) 
[1] 1 2 4 
+0

Спасибо, Dason. Отлично. Я бы не догадался, что ты так поступил. (Я знал, что это FAQ, но сложно построить полезную строку поиска для ответа.) – Mars

+0

Следующий вопрос: как я могу получить эту синтаксическую информацию из встроенной справочной системы? – Mars

+0

'?" ["' Должен работать. Или 'help (" [")'. – Dason

Смежные вопросы