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


допустим, у меня есть такой список:

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

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

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

есть ли ярлык обозначения для этого?

3 51

3 ответа:

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

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

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

library(purrr)
map(x, 1)

для вашего примера списка вы можете просто сделать:

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

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

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

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

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

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