私の質問は次のとおりです。反復回数を与えるアルゴリズムを計算し、反復回数を出力したいとします。ただし、出力は常に次のように小数点以下の桁数が多くなります。
64.00000000
R で型キャストを行うことで整数を取得することは可能ですか? どのようにしますか??
私の質問は次のとおりです。反復回数を与えるアルゴリズムを計算し、反復回数を出力したいとします。ただし、出力は常に次のように小数点以下の桁数が多くなります。
64.00000000
R で型キャストを行うことで整数を取得することは可能ですか? どのようにしますか??
整数モードへの強制には、いくつかの落とし穴があります。おそらく、何らかの構造にさまざまな数値があると思います。マトリックスを使用している場合、出力ルーチンはすべての数値を同じ精度で表示します。この結果を算術処理で計算した場合、実際にはその値として 64 ビット表示よりも小さい可能性があります。
> 64.00000000-.00000099999
[1] 64
> 64.00000000-.0000099999
[1] 63.99999
したがって、これが含まれる構造体のすべての値を整数として表示したい場合、最も安全なのは次のようになります。
round(64.000000, 0)
...これが発生する可能性があるため、そうでない場合。
> as.integer(64.00000000-.00000000009)
[1] 63
もう 1 つの落とし穴は、整数の値の範囲が浮動小数点数の範囲よりもかなり小さいことです。
出力を整数に変換しようとする代わりに、最初に整数ではない理由を見つけて、そこで修正します。
たとえば、整数として初期化しましたか、num.iterations <- 0L
または(数値)num.iterations <- integer(1)
に設定するのを間違えましたか?0
インクリメントしたときに、1
(数値) または1L
(整数) を追加しましたか?
よくわからない場合は、コードを調べて、class
関数を使用して変数の型を確認してください。
問題を根本から解決することで、その後のトラブルを大幅に軽減できます。また、多数の操作が数値よりも整数の方が高速であるため、コードをより効率的にすることもできます (例)。
この関数as.integer()
は数値を 0 次まで切り捨てるため、適切な近似値を取得するには 0.5 を追加する必要があります。
dd<-64.00000000
as.integer(dd+0.5)