Wybierz wiele elementów z listy

83

Mam listę w R o długości około 10 000 elementów. Powiedzmy, że chcę wybrać tylko elementy, 5, 7 i 9. Nie jestem pewien, jak bym to zrobił bez pętli for.

Chcę zrobić coś takiego, mylist[[c(5,7,9]]ale to nie działa. Wypróbowałem także tę lapplyfunkcję, ale nie udało mi się też jej uruchomić.

user1357015
źródło
19
Z dokumentacji pod adresem ?"[[": Najważniejszą rozróżnienia [, [[i $jest to, że [można wybrać więcej niż jeden element, podczas gdy dwa pozostałe wybrać pojedynczy element.
A5C1D2H2I1M1N2O1R2T1
1
W nawiązaniu do komentarza @ mrdwab, będącego wektoryzowanym światem R, „pojedynczy element” może być wektorem!
seancarmody

Odpowiedzi:

139

mylist[c(5,7,9)] powinien to zrobić.

Chcesz, aby listy podrzędne były zwracane jako listy podrzędne listy wyników; nie używasz [[]](a raczej funkcja jest [[) do tego - jak Dason wspomina w komentarzach, [[łapie element.

Glen_b
źródło
8
Żeby dodać więcej szczegółów - "[" zwróci podlistę, więc sensowne jest użycie do niej wielu danych wejściowych. "[[" faktycznie pobierze sam element, więc może przyjmować tylko jedno wejście, ponieważ nie zwraca listy (chyba że sam element jest listą).
Dason,
Czy to jest wektoryzowane? Mam dwie listy: bzawiera 10 milionów elementów.filter_binsto lista, na której każdy element jest indeksem. więc aby uzyskać tylko elementy bz tego samego indeksu, mam lapply(filter_bins, function(x) b[x, ]) więc b [x,] zwraca tylko podzbiór wierszy (gdzie każdy element jest wybierany przez filter_bins) .. Mam nadzieję, że to ma sens. Moje pytanie jest takie, że to jest bardzo powolne
masfenix
@masfenix powinieneś wygenerować nowe pytanie opisujące szczegóły.
Glen_b
Czy powyższe rozwiązanie można wykonać za pomocą czegoś takiego jak dplyr :: select () i zawiera ('jakiś tekst')?
Opuszczony
3
@HermanToothrot Ty nie. Przynajmniej nie bezpośrednio. Możesz nałożyć lub nałożyć na indeksy, które chcesz wyodrębnić i iteracyjnie złapać odpowiedni element [[. Ale jeśli chcesz wyodrębnić wiele elementów, to naprawdę pobierasz podlistę i powinieneś po prostu użyć[
pobierasz podlistę