2016-03-21 2 views
3

Я пытаюсь получить значение последнего элемента каждого подэлемента списка из R. Элементы списка представляют собой векторы разной длины, поэтому индекс последнего подэлемента не является постоянным между элементами списка. Я искал SO, но нашел информацию только для тех, кто хочет получить, например, второй элемент подэлемента каждого элемента. Это не полезно для меня, поскольку элементы списка имеют непостоянную длину.Как получить последний подэлемент каждого элемента списка в R

Меня интересуют только решения, которые не связаны с использованием цикла for, поскольку мой список имеет длину> 1 миллион.

Спасибо!

+0

'lapply (mtcars, function (x) {x [length (x)]})'? Это немного зависит от того, как структурирован список. – alistaire

+0

Другим интересным вариантом является 'mapply ('[[', x, lengths (x))' –

ответ

6

Вы можете использовать lapply и tail:

x <- list(a=1:5, b = 1:10, d = 9:11) 
last_elems <- lapply(x, tail, n = 1L) 

Как отметил Hadd Е. Nuff, чтобы получить числовой вектор вместо списка с одним элементом, vapply является хорошим выбором:

last_elems <- vapply(x, tail, n = 1L, FUN.VALUE = numeric(1)) 
+0

Поскольку список отдельных векторов элементов несколько нежелателен, мы также можем использовать 'vapply (x, tail, 1L, 1L)' для быстрый атомный векторный результат (или 'sapply()'). –

+0

@ HaddE.Nuff Хорошая точка, vapply - лучший выбор. – tfc

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