2012-10-28 26 views
7

Giả sử tôi có một danh sách:Sử dụng lapply với nếu để kiểm tra mỗi phần tử trong một danh sách

alist<- list(4,6,8,9) 

Tôi muốn kiểm tra nếu mỗi phần tử danh sách lớn hơn 7 và trả về một danh sách trong tổng số 1 nếu đúng và 0 nếu nó sai.

Tuy nhiên tôi phải sử dụng lapply.

lapply(alist,if,>7,1) or lapply(alist,if,cond>7,1) 

Tất nhiên không ai trong số những công việc và tôi tiếp tục nhận được lỗi sau.

Error: unexpected ',' in "lapply(alist, if," 
+0

Tôi biết bạn muốn sử dụng 'lapply' nhưng:' as.numeric (alist> 7) 'hoạt động tốt. –

+3

"phải sử dụng' lapply' "==" bài tập về nhà ngu ngốc "? –

+0

Ha ha yip Carl bạn đóng đinh nó. Tôi đã nhận được tôi nghĩ về 30% cách để tìm ra nhiệm vụ khi tôi gặp phải điều này. Nghĩ rằng đó là một câu hỏi hay mặc dù lapply có ... như một đối số và tôi đã tìm một nơi nào đó ở đó tôi có thể hoàn thành câu lệnh if. – user1181337

Trả lời

17

Điều đó khiến tôi trả lời câu hỏi này bởi vì rất khó để làm điều này. Bạn có thể thử là rõ ràng hơn và sử dụng dấu ngoặc như trong:

lapply(alist, function(x) if (x > 7) {1} else {0}) 

Hoặc vectorized ifelse

lapply(alist, function(x) ifelse(x > 7, 1, 0)) 

Hoặc tốt nhất của tất cả:

as.numeric(alist > 7) 
+0

+1 giống như câu trả lời của tôi, nhưng tôi sẽ lưu ý ifelse() là một chút không trực quan vì đây có vẻ là một người dùng R mới. Hài hước mà tôi nói điều này bởi vì câu hỏi ngay lập tức trước khi điều này là somene phàn nàn về một lỗi đóng cửa với ifelse() lol. –

+0

Bạn rất đúng (IMO) về 'ifelse'. Tôi trả lời và 'ifelse' vấn đề tối qua là tốt (khi người dùng nên đã sử dụng' if() {} else {} ') –

2

Một hai:

lapply(alist > 7, as.integer) 

hoặc

lapply(alist > 7, ifelse, 1, 0)