2013-09-01 38 views
7

Tôi có một danh sách liệt kê các hình thức sau đây:Chọn một tập hợp con của danh sách từ danh sách liệt kê

[[1]] 
[[1]][[1]] 
[1] 0.4 
[[2]] 
[1] 0.3 
[[3]] 
[1] 9 
[[4]] 
[1] 10 
[[5]] 
[1] 0.4 

[[2]] 
[[2]][[1]] 
[1] 0.4 
[[2]] 
[1] 0.4 
[[3]] 
[1] 99 
[[4]] 
[1] 4 
[[5]] 
[1] 3 

[[3]] 
[[3]][[1]] 
[1] 0.3 
[[2]] 
[1] 0.3 
[[3]] 
[1] 2 
[[4]] 
[1] 08 
[[5]] 

... 

[[100]] 
[[100]][[1]] 
[1] 0.4 
[[2]] 
[1] 0.1 
[[3]] 
[1] 0 
[[4]] 
[1] 7 
[[5]] 

Tôi muốn chọn tất cả các danh sách có 0,4 trong [[i]][[1]] của họ.

Đó là, chọn

[[i]][[1]]==0.4 

Kết quả sẽ là:

[[1]] 
[[1]][[1] 
[1] 0.4 
[[2]] 
[1] 0.3 
[[3]] 
[1] 9 
[[4]] 
[1] 10 
[[5]] 
[1] 0.4 

[[2]] 
[[2]][[1]] 
[1] 0.4 
[[2]] 
[1] 0.4 
[[3]] 
[1] 99 
[[4]] 
[1] 4 
[[5]] 
[1] 3 
... 
[[100]] 
[[100]][[1]] 
[1] 0.4 
[[2]] 
[1] 0.1 
[[3]] 
[1] 0 
[[4]] 
[1] 7 
[[5]] 

này có thể được thực hiện mà không có một vòng lặp for hoặc một cái gì đó?

Tôi đã thử chọn [[i]][[1]]==0.4, nhưng nó chỉ trả về điều kiện chân lý. Nếu tôi muốn chọn dựa trên nhiều điều kiện thì sao? Ví dụ, [[i]][[1]]==0.4 & [[i]][[2]]==0.9

Trả lời

6

Bạn có thể sử dụng một cái gì đó như:

ll[which(sapply(ll, `[[`, 1) == .4)] 

Nhưng bạn có thể chạy vào các vấn đề điểm nổi ....


Dưới đây là một MRE:

Một list với 4 mục.

ll <- list(list(.4, 1), list(.1, 2), list(.3, 3), list(.4, 4)) 
# [[1]] 
# [[1]][[1]] 
# [1] 0.4 
# 
# [[1]][[2]] 
# [1] 1 
# 
# 
# [[2]] 
# [[2]][[1]] 
# [1] 0.1 
# 
# [[2]][[2]] 
# [1] 2 
# 
# 
# [[3]] 
# [[3]][[1]] 
# [1] 0.3 
# 
# [[3]][[2]] 
# [1] 3 
# 
# 
# [[4]] 
# [[4]][[1]] 
# [1] 0.4 
# 
# [[4]][[2]] 
# [1] 4 

Áp dụng các giải pháp đề xuất:

ll[which(sapply(ll, `[[`, 1) == .4)] 
# [[1]] 
# [[1]][[1]] 
# [1] 0.4 
# 
# [[1]][[2]] 
# [1] 1 
# 
# 
# [[2]] 
# [[2]][[1]] 
# [1] 0.4 
# 
# [[2]][[2]] 
# [1] 4 

Thêm nhiều điều kiện là khá tương tự:

ll[which(sapply(ll, `[[`, 1) == .4 & sapply(ll, `[[`, 2) == 1)] 
# [[1]] 
# [[1]][[1]] 
# [1] 0.4 
# 
# [[1]][[2]] 
# [1] 1 
+0

lớn các công trình này, làm thế nào để tôi sửa đổi mã nếu tôi muốn có nhiều điều kiện được hoàn thành? – ghb

+0

@ user2733997, xem cập nhật. – A5C1D2H2I1M1N2O1R2T1

+0

Tôi có một danh sách trong danh sách, trong danh sách trong danh sách. Việc đặt danh sách đầu tiên dựa trên nội dung của tác phẩm cuối cùng hoạt động theo cách tương tự như được mô tả ở đây? Tôi không thể tìm thấy bất kỳ ví dụ tốt. – rdatasculptor

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