2014-05-18 5 views
6

Ich versuche, Funktionen in R zu schreiben, wo mehrere CSV-Dateien gelesen werden sollen. Sie heißen 001.csv, 002.csv, ... 332.csv.Erklärung für sprintf ("% 03d", 7) Funktionalität?

Mit paste habe ich geschafft, Namen 1.csv, 2.csv und so weiter zu konstruieren, aber ich habe Schwierigkeiten mit führenden Nullen. Es gibt einen Hinweis, dass die Konstruktion wie sprintf("%03d", 7) erforderlich ist, aber ich habe keine Ahnung, warum und wie das funktioniert.

Also kann jemand erklären, was die folgende Aussage tatsächlich tun kann?

+3

Haben Sie die '? Sprintf' Hilfeseite gelesen? Gab es einen bestimmten Teil, der dir unklar war? – MrFlick

Antwort

20

sprintf kommt ursprünglich von C und alle Formatierungsregeln werden davon auch übernommen. Siehe ?sprintf in R oder this oder this Referenz, um das Thema im Detail zu lernen. Hier werde ich kurz skizzieren, was die Magie dahinter ist.

"%03d" ist eine Formatierungszeichenfolge, die angibt, wie 7 gedruckt wird.

  • d steht für decimal integer (nicht double!), So sagt es es keine Gleitkomma oder so etwas sein, nur eine ganz normale ganze Zahl ist.
  • 3 zeigt an, wie viele Ziffern die gedruckte Nummer haben wird. Genauer gesagt wird die Nummer mindestens 3 Ziffern: 7 wird __7 (mit Leerzeichen anstelle von Unterstrichen), aber 1000 wird 1000 bleiben, da es keine Möglichkeit gibt, diese Nummer mit nur 3 Ziffern zu schreiben.
  • 0 vor 3 zeigt, dass führende Leerzeichen durch Nullen ersetzt werden sollten. Versuchen Sie, mit sprintf("%+3d", 7), sprintf("%-3d", 7) zu experimentieren, um andere mögliche Modifikatoren zu sehen (sie heißen Flags).
+1

Vielen Dank dafür; ausgezeichnet und prägnant. Sehr hilfreich! – Aron

+0

@Aron Danke - immer ein Vergnügen! – tonytonov