3

R環境内でプログラミングするときは、rep( "[35,40)"、1020)を使用しました。これにより、「[35,40)」の1020倍のリストが表示されます。ただし、結果にはこれらの要素が1019個しか含まれていません。

プログラミングは最初に2つのベクトルの複製内で行われましたが、分割しても機能しません。

私が試したのは、異なるバージョンのR(R 2.11.1、R 2.9.0、R 2.10.0、R 2.7.2)を使用することですが、いずれも正しく機能しません。

このバグがないバージョンのRがあるかどうか誰かが考えていますか?または、どうすればこの問題を解決できますか?

したがって、このためのコード:

> agecats
 [1] "(-0.001,5]" "(5,10]"     "(10,15]"    "(15,20]"    "(20,25]"   
 [6] "(25,30]"    "(30,35]"    "(35,40]"    "(40,45]"    "(45,50]"   
[11] "(50,55]"    "(55,60]"    "(60,65]"    "(65,70]"    "(70,75]"   
[16] "(75,80]"  
> weightage<-c(0.9,0.9,2.7,3.1,8.9,10.05,10.05,10.2,10.2,9.3,9.3,8.7,7.9,3.15,3.15,1.5)
> weightage
 [1]  0.90  0.90  2.70  3.10  8.90 10.05 10.05 10.20 10.20  9.30  9.30  8.70
[13]  7.90  3.15  3.15  1.50

> weightage100<-weightage*100
> weightage100
 [1]   90   90  270  310  890 1005 1005 1020 1020  930  930  870  790  315  315
[16]  150
> tosamplefrom<-rep(agecats,weightage100)
> table(tosamplefrom)
tosamplefrom
(-0.001,5]    (10,15]    (15,20]    (20,25]    (25,30]    (30,35]    (35,40] 
        90        270        310        890       1005       1005       1019 
   (40,45]    (45,50]     (5,10]    (50,55]    (55,60]    (60,65]    (65,70] 
      1019        930         90        930        869        790        315 
   (70,75]    (75,80] 
       315        150 

そして、ここで私は8と9を1020回持つべきであり、それはちょうど1019回を与えます。

キム

4

1 に答える 1

11
(10.20 * 100) == 1020
FALSE

これはあなたの問題です。10.2 は正確に表すことができず、浮動小数点数を掛けて整数であると想定しているため、すべてがうまくいきません。R は数値の下限を取得するか、変換に as.integer を使用する必要があるようです。

floor(10.2*100)
1019
as.integer(10.2*100)
1019

丸めは、浮動小数点値がわずかに上か下かに関係なく機能します。次の変更により、問題が修正されます。

weightage100 <- round (weightage*100)

R Infernoを読んでください(このような浮動小数点の問題は R だけの問題ではありません。たとえば、Python で複製しただけです)。

于 2010-07-28T10:59:11.623 に答える