2014-05-18 24 views
6

Sto provando a scrivere funzioni in R dove lo scopo è leggere più file .csv. Sono denominati come 001.csv, 002.csv, ... 332.csv.Spiegazione per la funzionalità sprintf ("% 03d", 7)?

Con paste Sono riuscito a creare nomi 1.csv, 2.csv e così via, ma ho difficoltà con l'aggiunta di zeri iniziali. C'è un indizio che la costruzione come sprintf("%03d", 7) è necessaria, ma non ho idea del perché e di come funzioni.

Quindi qualcuno può spiegare che cosa può realmente fare la seguente affermazione?

+3

Hai letto la pagina di aiuto '? Sprintf'? C'era una parte specifica che non ti era chiara? – MrFlick

risposta

20

sprintf deriva originariamente da C e tutte le regole di formattazione sono prese anche da esso. Vedere ?sprintf in R o this o this riferimento per apprendere l'argomento in dettaglio. Qui descriverò brevemente qual è la magia dietro di esso.

"%03d" è una stringa di formattazione che specifica come verrà stampato 7.

  • d sta per decimal integer (non double!), Così si dice non ci sarà in virgola mobile o qualcosa di simile, solo un intero normale.
  • 3 mostra quante cifre avrà il numero stampato. Più precisamente, il numero avrà almeno 3 cifre: 7 sarà __7 (con spazi anziché caratteri di sottolineatura), ma 1000 rimarrà 1000, poiché non è possibile scrivere questo numero con solo 3 cifre.
  • 0 prima di 3 indica che gli spazi iniziali devono essere sostituiti da zero. Prova a sperimentare con sprintf("%+3d", 7), sprintf("%-3d", 7) per vedere altri possibili modificatori (sono chiamati bandiere).
+1

Grazie per questo; eccellente e succinto. Molto utile! – Aron

+0

@Aron Grazie - sempre un piacere! – tonytonov