web-dev-qa-db-ja.com

sprintf( "%03d"、7)機能の説明?

複数の.csvファイルを読み取ることを目的とした関数をRで記述しようとしています。それらの名前は001.csv、002.csv、... 332.csvです。

pasteを使用して、1.csv、2.csvなどの名前を作成できましたが、先行ゼロを追加するのに問題があります。 sprintf("%03d", 7)のような構造が必要であるというヒントがありますが、これがなぜ、どのように機能するのかわかりません。

では、誰かが次のステートメントで実際に何ができるかを説明できますか?

13
user3592253

sprintfは元々Cからのものであり、すべてのフォーマット規則もCから取得されます。主題の詳細については、Rの_?sprintf_または this または this リファレンスを参照してください。ここでは、その背後にある魔法の概要を簡単に説明します。

_"%03d"_は、_7_の印刷方法を指定するフォーマット文字列です。

  • dは_decimal integer_(double!ではない)を表すため、浮動小数点などはなく、通常の整数のみであると表示されます。
  • _3_は、印刷された数値の桁数を示します。より正確には、数値は少なくとも3桁になります:_7_は___7_(アンダースコアの代わりにスペースを使用)、ただし、この番号を3桁だけで書き込む方法がないため、_1000_は_1000_のままになります。
  • _0_の前の_3_は、先頭のスペースをゼロに置き換える必要があることを示しています。 sprintf("%+3d", 7)sprintf("%-3d", 7)を試して、他の可能な修飾子を確認してください(これらはflagsと呼ばれます)。

そうは言っても、sprintf("%03d", 7)からの出力は_007_になります。

35
tonytonov

03dは最小3桁の出力を出力します...出力が3桁未満の場合、最初にゼロを追加します。出力が1桁を超える場合は、単に出力を出力します。 output(%d)= 2の場合、%3dは= 002として出力されます。

0