2010-12-27 10 views
4

私は数値ベクトルからのデータフレームを作成すると、Rは、私は私の分析に必要と精度以下の値を切り捨てるようだ:(*が、更新1を参照)Rデータフレームの数値精度を保持しますか?

data.frame(x=0.99999996) 

戻り1

私はこだわっていますspline(x,y)をフィッティングし、yが変化する間に2つのx値が1に設定されます。私はこれをハックすることができますが、私は利用可能な場合は標準的なソリューションを使用することをお勧めします。アップデート1

plot(d$x, d$y, ylim=c(0,50)) 
lines(spline(d$x, d$y),col='grey') #bad fit 
lines(spline(d[-c(4:6),]$x, d[-c(4:6),]$y),col='red') #reasonable fit 

:ここ

は例のデータは、以下のソリューションが動作する

d <- data.frame(x = c(0.668732936336141, 0.95351462456867, 
0.994620622127435, 0.999602102672081, 0.999987126195509, 0.999999955814133, 
0.999999999999966), y = c(38.3026509783688, 11.5895099585560, 
10.0443344234229, 9.86152339768516, 9.84461434575695, 9.81648333804257, 
9.83306725758297)) 

を設定するが、私はあまり主観的であるものを好むだろうです

*この質問を投稿してから、データフレームに元の値がまだ含まれていても、これが1を返すことに気付きました。この例では、データセット、およびディルクからいくつかのポインタを投稿するdputを使用した後

> dput(data.frame(x=0.99999999996)) 

戻り

structure(list(x = 0.99999999996), .Names = "x", row.names = c(NA, 
-1L), class = "data.frame") 

アップデート2

は、私はこの問題は、切り捨てではないことがわかりますxの値のうち、計算に使用したモデルの数値誤差の範囲はyです。これは、同等のデータポイントのいくつかを削除することを正当化します(例の赤い線のように)。

答えて

6

あなたが本当に全くとその結果を印刷するためにRを設定したい場合不合理な精度は、options(digits=16)を使用してください。

これは、htese結果を使用する関数の精度については何もしないことに注意してください。コンソールに印刷するときの値の表示方法を変えるだけです。横軸よりも有効桁数を入れない限り、値が格納されたりアクセスされたりしているため、値は丸められません。 'digits'オプションは浮動小数点数の最大精度には影響しません。

+0

答えをありがとう。精度は不合理かもしれませんが、スプライン補間などの結果を妥当なものに保ちます。 –

+0

私はまだ間違った問題に焦点を当てることを恐れています: 'spline(x、y)'は印刷された値を決して使用しません。 –

+0

@Dirk私はx値を切り捨てるRに問題はないが、Y値を計算するモデルのエラーに問題があることを理解していると思います。 –

5

R FAQ 7.31とその中に引用されている参考文献 - コンピュータ上の浮動小数点表現について常に知っておくべきことについての本当に有名な論文を読んでください。

KerngighanとPlaugerから終了引用符も素晴らしいです:

10.0倍0.1はほとんどない1.0です。

そして、数値精度の問題のほかに、Rは、それが内部で使用するよりも少ない小数点以下を出力しますどのようにももちろんあります:

> for (d in 4:8) print(0.99999996, digits=d) 
[1] 1 
[1] 1 
[1] 1 
[1] 1 
[1] 0.99999996 
> 
+0

私はFAQから多くを得ていませんでした。私はゴールドバーグの論文を読むでしょう。私の問題は、スプライン(x、y)と2つのx値== 1を丸めることによってフィッティングするときに発生しますが、yは引き続き増加します。 –

+0

をよく読んで、私は関連する点が「これよりもはるかに高い精度を望むなら、慎重にエラー伝搬を考慮する必要がある」と思っています。私にこれを手助けしてくれてありがとう –

関連する問題