2012-08-25 29 views
48

Tôi có một danh sách dài R khoảng 10.000 phần tử. Nói rằng tôi muốn chỉ chọn các phần tử, 5, 7 và 9. Tôi không chắc chắn làm thế nào tôi sẽ làm điều đó mà không có vòng lặp for.Chọn nhiều thành phần từ danh sách

Tôi muốn làm một cái gì đó như mylist[[c(5,7,9]] nhưng điều đó không hiệu quả. Tôi cũng đã thử chức năng lapply nhưng cũng không thể làm việc đó.

+10

Từ tài liệu tìm thấy tại '?" [["': * Sự khác biệt quan trọng nhất giữa '[', '[[' và '$' là '[' có thể chọn nhiều hơn một phần tử trong khi hai chọn một phần tử duy nhất. * – A5C1D2H2I1M1N2O1R2T1

+0

Hơn nữa để nhận xét của @ mrdwab, đây là thế giới vector hóa của R, "một phần tử duy nhất" có thể là một véc tơ! – seancarmody

Trả lời

93

mylist[c(5,7,9)] nên thực hiện.

Bạn muốn danh sách phụ đượ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, hàm là [[) cho điều đó - như Dason đề cập trong các chú thích, [[ lấy phần tử.

+6

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

+0

Đây có phải là véc tơ không? Tôi có hai danh sách: 'b' chứa 10 triệu phần tử. 'filter_bins' là một danh sách trong đó mỗi phần tử là một chỉ mục. để chỉ lấy các phần tử từ 'b' có cùng chỉ mục, tôi có ' lapply (filter_bins, function (x) b [x,]) ' vì vậy b [x,] chỉ trả về một tập con của các hàng (nơi 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 rất chậm – masfenix

+0

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

Các vấn đề liên quan