で計算しています。私はEuler Problemsで作業していますが、フィボナッチ数列の最後の項が< 4e6である偶数項を合計するのが問題です。私はそれを最終的に得ましたが、偶数を数える以下の方法はうまくいかず、なぜ私は興味があります。関数出力の偶数をR
まず、シーケンスから偶数をカウントするこの方法は動作します:
numbers <- 1:32
N <- length(numbers)
total <- rep(0,N)
for (i in numbers){
if(i %% 2 == 0) total[i] <-i
}
sum(total) #272
次に、このFibbシーケンスは動作します:
Fibb<-function(x){
y <- 1:x
y[1] = 1
y[2] = 2
for (i in 3:x){
y[i] <- y[i-2] + y[i-1]
}
return(y)
}
が、私は最初のシーケンスdoesnの上で使用したのと同じSUM関数作業:
numbers <- as.integer(Fibb(32)) # 1, 2, 3, 5, 8, 13, 21...
N <- length(numbers)
total <- rep(0,N)
for (i in numbers){
if(i %% 2 == 0) total[i] <-i
}
sum(total) #NA
3番目のチャンクのtotal
は大ほとんどがNAsで構成されています。
編集:私が知りたいのは、最初のコードブロックのループが正しく動作し、3番目のループではないことです。最初の塊から3番目の塊にコピーして貼り付けたのは唯一の違いは "数列"です。
誰もこのような問題が発生しましたか? ありがとう!
合計の場合、インデックス作成とベクトル化を利用してループを回避します。たとえば、 'total = cumsum(numbers [numbers %% 2 == 0])'などです。 – eipi10
結局私は一緒に行った フラグ< - numbers %% 2 == 0 qq < - sum(numbers [flag]) しかし、私はなぜ2つのループが全く同じ構文で異なる結果をもたらすのか不思議です1行です。 –
'numbers'の最初のバージョンの値と' numbers'の2番目のバージョンの値を見て、あなたが使っている 'numbers'の* index *ではなく' numbers'の* values *ループインデックス。また、ループの後に 'total'の長さと値を見てください。 – eipi10