Як підмножити матрицю до одного стовпця, підтримувати тип даних матриці, підтримувати імена рядків / стовпців?


84

Коли я підмножую матрицю до одного стовпця, результатом є числовий клас, а не матриця (тобто myMatrix [, 5] для підмножини до п’ятого стовпця). Чи є компактний спосіб підмножити в один стовпець, підтримувати формат матриці та підтримувати імена рядків / стовпців, не роблячи чогось складного, наприклад:

matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )

Відповіді:


122

Використовуйте drop=FALSEаргумент для [.

m <- matrix(1:10,5,2)
rownames(m) <- 1:5
colnames(m) <- 1:2
m[,1]             # vector
m[,1,drop=FALSE]  # matrix

Я б покластися , що бачив це зовсім недавно , але це , можливо, було аналогічне поведінку dataframe , що ставиться під сумнів: stackoverflow.com/questions/6941985 / ...
IRTFM

5
Якщо ви хочете індексувати лише за першим виміром, чи можете ви використовувати m[1,,drop=FALSE]
крапку

Щоб навести приклад на статистичних підставах, використовуючи відстані D Кукса, а потім вибравши значення на основі значення відсічення, наприклад 0,1, це призведе до значень cooksD із відповідною кількістю рядків у відносному наборі даних cooksd<-as.data.frame(cooks.distance(ft1)) cooksD_outliers<-cooksd[cooksd>0.1,drop=FALSE,]
Elias EstatisticsEU

result <-apply (temp, 1, function (x) tapply (x, genesymbol, function (x) mean (x, na.rm = T))) Як вирішити проблему, результатом якої є масив, але насправді, Я хочу, щоб це був кадр даних з одним стовпцем? Дякую
Шіченг Го

@ShichengGuo: Вам слід задати нове запитання.
Джошуа Ульріх
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.