2013-12-16 4 views
3

Предположим, что у одного есть список объектов матрицы разной длины, но некоторые общие имена строк. Как можно сохранить только те строки, которые присутствуют во всех матрицах? Т.е., начиная с этого:Сохранять только строки, присутствующие во всех матрицах

> my.list 

$matrix.a 
     X1 X2 X3 
row.A 59 36 9 
row.B 54 29 44 
row.C 59 36 9 
row.D 54 88 32 

$matrix.b 
     X1 X2 X3 
row.B 47 12 2 
row.C 11 36 9 
row.D 54 23 99 

$matrix.c 
     X1 X2 X3 
row.A 95 31 77 
row.B 63 29 44 
row.C 60 43 2 

И это производство:

> my.list.subsetted 

$matrix.a 
     X1 X2 X3 
row.B 54 29 44 
row.C 59 36 9 

$matrix.b 
     X1 X2 X3 
row.B 47 12 2 
row.C 11 36 9 

$matrix.c 
     X1 X2 X3 
row.B 63 29 44 
row.C 60 43 2 

Я подозреваю, что можно было бы использовать subset() и оператор %in%, но я не могу найти точное решение.

ответ

6
r <- Reduce(intersect, lapply(my.list, rownames)) 
my.list.subsetted <- lapply(my.list, function(m) m[r, ]) 
+0

Спасибо, я думаю, что это на правильном пути --- но не первая строка кода не содержит аргумент y =? Я получаю ошибку «Ошибка в as.vector (y): отсутствует аргумент« y », без значения по умолчанию». Я пробовал 'r <- Map (пересекаться, lapply (my.list, rownames), lapply (my.list, rownames)), но это, похоже, не работает. – Roger

+0

К сожалению, это должно быть уменьшено, а не Карта. –

+0

Спасибо, но эта первая строка теперь просто выводит символ '' (0) '. – Roger

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