Выберите первый элемент вложенного списка
допустим, у меня есть такой список:
x = list(list(1,2), list(3,4), list(5,6))
Я хотел бы список, который содержит только первые элементы вложенного списка. Я могу сделать это, вернув другой список, как так
x1 = lapply(x, function(l) l[[1]])
есть ли ярлык обозначения для этого?
3 ответа:
Не люблю ярлыков, но вы можете сделать это:
lapply(x, `[[`, 1) # [[1]] # [1] 1 # # [[2]] # [1] 3 # # [[3]] # [1] 5
для вашего примера списка вы можете просто сделать:
unlist(x)[ c(TRUE,FALSE) ]
но это зависит от того, что каждый подсписок имеет ровно 2 элемента.
если есть разное количество элементов, то вы можете сначала сделать
sapply
чтобы вычислить длины, затем вычислить соответствующие позиции 1-го элемента (см.cumsum
), затем выберите эти значения изunlist
Эд списке. Но к тому времени принятый ответ, вероятно, намного проще.если все подсписки имеют одинаковые длина (но может отличаться от 2), то вы могли бы сделать что-то вроде:
do.call( rbind, x)[,1]
или некоторые другие приведения к общему объекту. Но я сомневаюсь, что это будет так же эффективно, как
lapply
подход.