2013-04-14 55 views
28

Có cách nào để thực hiện việc hiểu danh sách trong R không?Đọc danh sách trong R

Giống như python:

sum([x for x in range(1000) if x % 3== 0 or x % 5== 0]) 

cùng trong Haskell:

sum [x| x<-[1..1000-1], x`mod` 3 ==0 || x `mod` 5 ==0 ] 

cách thực tiễn để áp dụng điều này vào R là gì?

Nick

Trả lời

24

Something như thế này?

l <- 1:1000 
sum(l[l %% 3 == 0 | l %% 5 == 0]) 
+0

Cảm ơn! (Đặt khoảng trống xung quanh toán tử %% có thể cải thiện khả năng đọc.) – Nick

+0

Câu trả lời đã chỉnh sửa với khoảng trống để dễ đọc trong tương lai. – MadScone

+4

Không phải là nó sẽ tạo ra sự khác biệt, nhưng điều này sẽ nhanh hơn vì nó sử dụng các số nguyên và không tạo một vectơ khác: 'tổng (l * (l %% 3L == 0L | l %% 5L == 0L))' – flodel

8

Vâng, danh sách hiểu là có thể trong R:

sum((1:1000)[(1:1000 %% 3) == 0 | (1:1000 %% 5) == 0]) 
2

Và, (loại) cho-hiểu của scala:

for(i in {x <- 1:100;x[x%%2 == 0]})print(i) 
+0

Có thể trực tiếp 'yield' từ một vòng lặp' for' như trong Scala không? – bluenote10

+2

Đó là vai trò của các chức năng gia đình [sapply'] (http://www.r-bloggers.com/using-apply-sapply-lapply-in-r/) 'x <- sapply (1:10, hàm (x) x * x) ' – PedroB

1

Một cách khác

sum(l<-(1:1000)[l %% 3 == 0 | l %% 5 == 0]) 
Các vấn đề liên quan