Подтвердить что ты не робот

Выбрать первый элемент вложенного списка

Скажем, у меня есть список вроде этого:

x = list(list(1,2), list(3,4), list(5,6))

Мне нужен список, содержащий только первые элементы вложенного списка. Я могу сделать это, возвращая еще один такой список

x1 = lapply(x, function(l) l[[1]])

Есть ли для этого сокращение?

4b9b3361

Ответ 1

Не так много ярлыка, но вы можете сделать это:

lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5

Ответ 2

Другая возможность использует красивую библиотеку purrr:

library(purrr)
map(x, 1)

Ответ 3

В вашем списке примеров вы можете просто:

unlist(x)[ c(TRUE,FALSE) ]

но это зависит от каждого подсписка, имеющего ровно 2 элемента.

Если есть разные числа элементов, вы можете сначала выполнить sapply для вычисления длин, затем вычислить соответствующие позиции 1-го элемента (см. cumsum), затем выбрать эти значения из списка unlist ed. Но к тому времени принятый ответ, вероятно, намного проще.

Если все подписи имеют одинаковую длину (но могут отличаться от 2), вы можете сделать что-то вроде:

do.call( rbind, x)[,1]

или какой-либо другой приведение к общему объекту. Но я сомневаюсь, что это было бы так же эффективно, как подход lapply.