Chọn nhiều phần tử từ một danh sách


82

Tôi có một danh sách trong R dài khoảng 10.000 phần tử. Giả sử tôi chỉ muốn chọn các phần tử, 5, 7 và 9. Tôi không chắc mình sẽ làm như thế nào nếu không có vòng lặp for.

Tôi muốn làm một cái gì đó như thế mylist[[c(5,7,9]]nhưng điều đó không hiệu quả. Tôi cũng đã thử lapplychức năng này nhưng vẫn không thể hoạt động được.


17
Từ các tài liệu tìm thấy tại ?"[[": Phần lớn biệt quan trọng giữa [, [[$[có thể chọn nhiều hơn một yếu tố trong khi hai người còn lại chọn một yếu tố duy nhất.
A5C1D2H2I1M1N2O1R2T1

Nói thêm về nhận xét của @ mrdwab, đây là thế giới vecto của R, "một phần tử duy nhất" có thể là một vectơ!
seancarmody

Câu trả lời:


136

mylist[c(5,7,9)] Hãy làm nó.

Bạn muốn các danh sách con được trả về dưới dạng danh sách con của danh sách kết quả; bạn không sử dụng [[]](hay đúng hơn là chức năng [[) cho điều đó - như Dason đã đề cập trong các nhận xét, hãy [[nắm lấy phần tử.


8
Chỉ cần thêm một số chi tiết - "[" sẽ trả về một danh sách phụ, do đó bạn có thể sử dụng nhiều đầu vào với nó. "[[" thực sự sẽ lấy chính phần tử vì vậy nó chỉ có thể nhận một đầu vào duy nhất vì nó không trả về một danh sách (trừ khi bản thân phần tử là một danh sách).
Dason

Điều này có được vector hóa không? Tôi có hai danh sách: bchứa 10 triệu phần tử. filter_binslà một danh sách trong đó mỗi phần tử là một chỉ mục. vì vậy để chỉ lấy các phần tử từ bcùng một chỉ mục, tôi có lapply(filter_bins, function(x) b[x, ]) như vậy b [x,] chỉ trả về một tập hợp con của các hàng (trong đó mỗi phần tử được chọn bởi filter_bins) .. Tôi hy vọng điều này có ý nghĩa. Câu hỏi của tôi là điều này là rất chậm
masfenix

@masfenix bạn nên tạo một câu hỏi mới mô tả chi tiết.
Glen_b

Giải pháp trên có thể được thực hiện với một cái gì đó như dplyr :: select () and contains ('some text ") không?
Derelict

3
@HermanToothrot Bạn không. Ít nhất là không trực tiếp. Bạn có thể áp dụng hoặc áp dụng trên các chỉ số bạn muốn trích xuất và lặp đi lặp lại lấy phần tử tương ứng [[. Nhưng nếu bạn muốn trích xuất nhiều phần tử sau đó thực sự bạn đang grabbing một sublist và bạn chỉ nên sử dụng[
Dason
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.