RでProject Euler Problem 1再考

Problem 1ではfilterを使いたいですよね。Rでfilterにあたるものはないようです。その代わりにwhichを使います。whichは条件を満たす要素の添え字のベクトルを作ります。

N <- 10
v <- 1:(N-1)
print(which(v %% 3 == 0 | v %%5 == 0))
[1] 3 5 6 9

そしてその添え字のベクトルをベクトルに適用すると、添え字の要素が抽出されます。

[追記]
subsetという関数があるんですね。

N <- 1000
v <- 1:(N-1)
w <- subset(v, v %% 3 == 0 | v %% 5 == 0)
print(sum(w))
w <- v[which(v %% 3 == 0 | v %% 5 == 0)]
print(sum(w))

このように2段階を経る必要があるわけですが、この問題は添え字と要素が同じなので、1段階でOKです。

N <- 1000
v <- 1:(N-1)
w <- which(v %% 3 == 0 | v %% 5 == 0)
print(sum(w))