Rが指数表記(e + 10など)を使用しないように強制しますか?


228

Rにe+10-like表記の代わりに通常の数値を使用するように強制できますか?私が持っています:

1.810032e+09
# and 
4

同じベクトル内で見たい:

1810032000
# and
4

私は昔ながらのプログラムの出力を作成しており、を使用してテキストファイルを作成する必要がありますcat。これまでのところ問題なく動作しますが、ここではe+10表記法を使用できません。


回答:


228

これは少し灰色の領域です。Rは常に印刷メソッドを呼び出し、これらの印刷メソッドはいくつかのオプションをリッスンすることを思い出してください。「科学者」を含む-科学的表示に対するペナルティ。からhelp(options)

'scipen':整数。数値を固定表記または指数表記で出力することを決定するときに適用されるペナルティ。正の値は固定表記に偏り、科学表記に負の値を付けます。固定表記は、「scipen」桁を超えない限り優先されます。

例:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4)
R> ran2
[1] 1.81e+09 4.00e+00
R> options("scipen"=100, "digits"=4)
R> ran2
[1] 1810032000          4

とは言っても、私はそれでもなおファッジワースだと思っています。最も直接的な方法は、sprintf()幅を明示的に使用することsprintf("%.5f", ran2)です。


1
ありがとう。scipenは私が探していたオプションのようです。不気味なペナルティの説明で私は恥ずかしがりました。しかし、あなたの例はそれをうまく説明しています。sprintf、ハァッ?1週間前のsprintfでのトラブルについて言及しているのですか?:)
Matt Bannert

4
rstudioでデータセットをインポートし、train_sample_10k = format(train_sample_10k、scientific = FALSE)を実行して再ロードすると、科学表記が変更されます。
mixdev 2014年

これを行った後、どうすれば正常に戻すことができますか?
AIM_BLB 2018年

6
@CSA:(options("scipen"=0, "digits"=7)これらはデフォルト値です)
Scarabee 2018年

結果options("scipen"=100, "digits"=4)を達成するものをコードの上部に移動し、それを下回らないものを適切なメモとともに移動する必要があります。簡単な解決策を探している人を混乱させる可能性があります(Googleは最初の解決策を結果として示しています)。
xbsd


74

私の好きな答え:

format(1810032000, scientific = FALSE)
# [1] "1810032000"

これにより、R設定を変更することなく、必要なものが得られます。

数値オブジェクトではなく文字列を返すことに注意してください


1
変なことですが、私にはうまくいきません。エラーは発生しませんが、科学表記が出力されます。
Ovi 2018年

何が悪いのかわからない。私は非常に古いバージョン(3.1.0)と新しいバージョン(3.4.3)のRをチェックインしましたが、どちらでも動作します。おそらくどこか他の設定が優先されているか、Rにバージョン固有のバグまたはエッジケースのバグが見つかりました。数値オブジェクトではなく科学表記法で文字列をフィードしている可能性はありますか?それはそれを説明するでしょう。
ダニー

10
おそらく、これが数字ではなく文字を作成することに注目してください。
cengel

3
ベクトル内の数値の長さが異なる場合は、必ず使用してください。justified = "none"そうしないと、同じ長さにスペースが埋め込まれます。
ローレンフィッチ

1
format(1e6, scientific=FALSE)戻り"1000000"ながらas.character(1e6)戻る"1e+06"ので、2つの方法の違いがあります。
ミッキー2018

7

入れてoptions(scipen = 999) 、あなたに.Rprofileファイルには、デフォルトで自動実行を取得しますので。(手動での実行に依存しないでください。)

(これは他の答えとは異なる何かを言っています:どのように?

  1. これにより、毎日または毎月、複数のプロジェクト、複数の言語の間でサンクを行ったときに、正常な状態が保たれます。プロジェクトごとの設定を忘れずに入力することはエラーが発生しやすく、スケーラブルではありません。グローバルな〜/ .Rprofileまたはプロジェクトごとの.Rprofileを使用できます。または、両方が前者を上書きします。
  2. すべての構成をプロジェクト全体またはグローバルの.Rprofileに保持すると、それが自動実行されます。これは、たとえばデフォルトのパッケージの読み込み、data.table構成、環境などに役立ちます。この場合も、その構成は設定のページに実行でき、それらとその構文を覚えて入力する可能性はゼロです。

なぜまったく同じ答えですか?stackoverflow.com/a/27318351/680068 Rprofileビットは別として、GingerJackの回答を編集したほうがよいでしょう。
zx8754 2018

@ zx8754:まったく同じ答えではありません。重要な点は、このものを.Rprofileに移動することです。その後、それを決して忘れることはできません。また、時間が経過すると、.Rprofileはすべてのカスタマイズを蓄積します。
smci 2018

1
もちろんあなた次第ですが、Qは「どうすればXを忘れることができないのか」ではなく、「どうすればXができるのか」です。
zx8754 2018

@ zx8754:毎日複数のプロジェクトでRとPython / pandasの間でサンクをやりました。どちらにもカスタマイズ、パッケージパスなどがあります。1つの共通の構成ファイルにそれらを格納することで、事が正気に保たれます。プロジェクト全体。
smci 2018

1
@ zx8754:複数の言語にまたがる複数のプロジェクトで作業している場合、「Xを実行するにはどうすればよいですか?」説明を追加しました。ドライブバイダウンボーターが誰であろうと。
smci 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.