2016-10-11 11 views
0

私は以下の簡単なコードで私の質問を定式化します。ベクトルaの要素は最初に0に割り当てられ、forループを使用して値を再割り当てします。 aのすべての要素は1であると仮定されます。ただし、7番目の要素は変更されません。誰でもこれがRでなぜ起こるのか説明できますか。forループ、小数点付きのシーケンスに関する混乱

> (s = seq(0.01,.1,0.01)) 
[1] 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 
> (a = rep(0,length(s))) 
[1] 0 0 0 0 0 0 0 0 0 0 
> for (i in s) a[i*100] = 1 
> a 
[1] 1 1 1 1 1 1 0 1 1 1 
+1

http://stackoverflow.com/q/9508518/134830も参照してください。 –

答えて

1

何らかの浮動小数点丸めの魔法。 を参照してください:

as.integer(s[7]* 100) 
# [1] 6 
# as.integer(s * 100) 
# [1] 1 2 3 4 5 6 6 8 9 10 

をだから第七指数は、それがsへの整数インデックスをループへのより安全なのではなく整数に浮動小数点のものをキャストに頼っている、実際に6

です。

for (i in seq_along(s)) 
    a[i] = 1 # or possibly something involving s[i] for your application