2014-10-24 5 views
0

Предполагаемая У меня есть следующий список:Как извлечь значения из списка в определенной позиции

x <- list(rbind(c(1,1,1,0),c(1,0,1,0), c(1,0,0,0)), c(1,1,0,1), c(1,2,3,4)) 

Я знаю, как использовать unlist(lapply(x, "[[", 4)), но она работает только тогда, когда они являются векторы внутри списка.

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

Возврат должен быть c(0, 1, 4).

Спасибо

+2

В последней колонке первого элемента списка является 'с (0,0,0)' - почему это всего лишь 0 в ожидаемом вами результате? –

+0

@beginneR Я забыл упомянуть, когда последний столбец каждого компонента один и тот же, можно использовать уникальный. – newbie

+0

Измените свой вопрос, чтобы включить эту важную деталь. –

ответ

0

Второй и третий list элементы являются только vectors. Кроме того, ваше описание извлечения last column и ожидаемого результата сбивает с толку. Если вы хотите извлечь последний элемент.

sapply(x, function(.x) tail(c(.x),1)) 
#[1] 0 1 4 

Или вы можете преобразовать vector элементы matrix, а затем извлечь columns.

x1 <- lapply(x, function(.x) if(is.vector(.x)) t(.x) else (.x)) 
    x2 <- lapply(x1, `[`,,4) 
    x2 
    #[[1]] 
    #[1] 0 0 0 

    #[[2]] 
    #[1] 1 

    #[[3]] 
    #[1] 4 

    unique(unlist(x2)) 
    #[1] 0 1 4 

Кроме того, ваш код только извлечение элементов в определенных позициях и не columns. Например:

z <- list(matrix(c(1:6), ncol=3), matrix(c(1:12), ncol=4)) 
    lapply(z, `[[`, 3) #extracts the third element and not the third column 
    #[[1]] 
    #[1] 3 

    #[[2]] 
    #[1] 3 

тогда,

lapply(z, `[`, ,3) 
    #[[1]] 
    #[1] 5 6 

    #[[2]] 
    #[1] 7 8 9 
0

Я хотел бы использовать

unlist(lapply(x, function(y) if(is.vector(y)) y[length(y)] else unique(y[,ncol(y)]))) 
#[1] 0 1 4 
Смежные вопросы