2013-04-14 27 views
28

Czy istnieje sposób na wdrożenie zrozumienia list w R?Zrozumienie listy w R

jak pyton:

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

samo w Haskell:

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

Jaki jest praktyczny sposób zastosować to w R?

Nick

Odpowiedz

24

coś takiego?

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

Dzięki! (Umieść spacje wokół operatorów %% może poprawić czytelność.) – Nick

+0

Edytowano odpowiedź ze spacjami dla przyszłej czytelności. – MadScone

+4

Nie znaczy to, że to coś zmieni, ale byłoby to szybsze, ponieważ używa liczb całkowitych i nie tworzy kolejnego wektora: 'sum (l * (l %% 3L == 0L | l %% 5L == 0L))' – flodel

8

Tak, lista zrozumienie jest możliwe w R:

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

A (rodzaj) for-pojmowania Scala:

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

Czy można również bezpośrednio "wydać" z pętli 'for', tak jak w Scali? – bluenote10

+2

To jest rola "sapply" [funkcje rodziny] (http://www.r-bloggers.com/using-apply-sapply-lapply-in-r/) 'x <- sapply (1:10, funkcja (x) x * x) ' – PedroB

1

Innym sposobem

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