2013-04-14 12 views
28

Rでリスト内包を実装する方法はありますか? Haskellではリスト内の理解をR

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

同じ:Pythonのような

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

Rでこれを適用する実用的な方法は何ですか?

ニック

答えて

24

何か?

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

ありがとう! (演算子の前後にスペースを入れると、%%は可読性を向上させることがあります) – Nick

+0

将来の可読性のためにスペースを含む編集済み回答。 – MadScone

+4

違いはありませんが、これは整数を使用し、別のベクトルを作成しないので、これは速くなります。 'sum(l *(l %% 3L == 0L | l %% 5L == 0L))' – flodel

8

はい、リストの内包はRで可能である。このような

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

そして、(種類の)スカラ座の-理解のために:

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

Scalaのように 'for'ループから直接' yield'することは可能ですか? – bluenote10

+2

それは 'sapply' [family functions](http://www.r-bloggers.com/using-apply-sapply-lapply-in-r/)' x < - sapply(1:10、関数(x)x * x) ' – PedroB

1

別の方法

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