Formaterad utdata med sprintf()
Styr antal decimaler, utfyllnad och justering med sprintf-formatsträngar.
Formaterad utdata med sprintf() är en gratis lektion i R Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.
Grunderna i sprintf()
sprintf() formaterar strängar med hjälp av en formatsträng med platshållare. Den fungerar precis som C:s printf. Det första argumentet är formatmallen; efterföljande argument fyller platshållarna i ordning.
sprintf('There are %d items', 5)
sprintf('Hello, %s!', 'Alice')
sprintf('Price: %.2f', 9.999)Platshållare för heltal och strängar
%d formaterar ett heltal, %s formaterar en sträng och %f formaterar ett flyttal. Varje platshållare ersätts i ordning av motsvarande argument.
name <- 'Bob'
age <- 34
score <- 88.5
sprintf('%s is %d years old with score %.1f', name, age, score)Styra antalet decimaler
%.2f betyder: formatera som ett flyttal med exakt två decimaler. Talet mellan . och f styr precisionen. Detta passar bra för valutor, procenttal och vetenskapliga värden.
pi_val <- 3.14159265
sprintf('%.0f', pi_val)
sprintf('%.2f', pi_val)
sprintf('%.5f', pi_val)
sprintf('$%.2f', 1234.5)Fältbredd och utfyllnad
Ett tal före formatbokstaven anger den minsta fältbredden. Värden högerjusteras som standard och fylls ut med mellanslag till vänster. Detta är användbart för att justera kolumner i rapporter i vanlig text.
items <- c('Pen', 'Notebook', 'Stapler')
prices <- c(1.5, 4.99, 7.25)
for (i in seq_along(items)) {
cat(sprintf('%-10s $%6.2f\n', items[i], prices[i]))
}Vänsterjustering med flaggan -
Prefixera breddtalet med - för att vänsterjustera text inom fältet. Detta är standardsättet att skapa vänsterjusterade kolumner i text med fast bredd.
# Right-aligned (default)
sprintf('%10s', 'hi')
# Left-aligned
sprintf('%-10s', 'hi')
# Practical: side-by-side
cat(sprintf('%-8s %5d\n', 'Alice', 42))
cat(sprintf('%-8s %5d\n', 'Bob', 7))Vetenskaplig notation med %e och %g
%e tvingar fram vetenskaplig notation (t.ex. 1.23e+04). %g väljer automatiskt det kortare av %f och %e — användbart när värdena sträcker sig över många storleksordningar.
x <- 0.000123456
y <- 123456789
sprintf('%e', x)
sprintf('%e', y)
sprintf('%g', x)
sprintf('%g', y)Nollutfyllnad med flaggan 0
Prefixera bredden med 0 för att fylla ut tal med inledande nollor i stället för mellanslag. Detta används ofta för ID:n med nollutfyllnad, datum och filnumreringssystem.
ids <- c(1, 12, 123, 1234)
sprintf('ID_%05d', ids)
# Date parts
sprintf('%04d-%02d-%02d', 2024, 5, 7)Procentformatering
Om Ni vill visa ett förhållande som procent multiplicerar Ni det med 100 och använder %.1f%%. De dubbla %% infogar ett bokstavligt procenttecken i resultatet (ett ensamt % skulle tolkas som början på en platshållare).
pass_rate <- 0.8743
sprintf('Pass rate: %.1f%%', pass_rate * 100)
growth <- 0.0523
sprintf('Growth: +%.2f%%', growth * 100)sprintf() är vektoriserad
När Ni skickar en vektor som argument till sprintf() itererar funktionen automatiskt över vektorn och returnerar en formaterad sträng per element. Formatsträngen återanvänds vid behov.
products <- c('Apple', 'Banana', 'Cherry')
prices <- c(0.99, 0.59, 2.49)
sprintf('%-8s costs $%.2f', products, prices)Flera platshållare, flera argument
Varje platshållare förbrukar ett argument i ordning. Ni kan fritt blanda %d, %f och %s i en enda formatsträng, och alla vektorargument återanvänds till den längsta längden.
months <- c('Jan', 'Feb', 'Mar')
revenue <- c(12500, 9800, 15300)
growth <- c(0.05, -0.12, 0.18)
sprintf('%s: $%d (growth: %+.1f%%)',
months, revenue, growth * 100)sprintf() jämfört med paste() — när ska de användas?
Använd paste()/paste0() för enkel sammanfogning; använd sprintf() när Ni behöver exakt numerisk formatering (decimaler, bredder och utfyllnad). sprintf() är mer utförlig men ger full kontroll över hur tal visas.
val <- 1234567.891
# paste: no formatting control
paste('Total:', val)
# sprintf: formatted as currency
sprintf('Total: $%,.2f', val)
# With manual formatting
sprintf('Total: $%15.2f', val)Snabbkontroll
Vilken formatkod i sprintf() infogar ett bokstavligt procenttecken % i resultatet?
Viktiga punkter om sprintf()
Viktiga punkter om sprintf():
%dheltal,%fflyttal,%ssträng,%evetenskaplig notation,%gautomatiskt val%.2f= 2 decimaler;%10.2f= bredd 10, 2 decimaler%-10s= vänsterjustering i ett fält med 10 tecken;%05d= nollutfyllnad till 5 siffror%%= bokstavligt procenttecken i resultatetsprintf()är vektoriserad över sina argument- Föredra
sprintf()framförpaste()när precisionen i den numeriska formateringen är viktig
x <- 0.87654
cat(sprintf('Default f : %f\n', x))
cat(sprintf('2 decimals : %.2f\n', x))
cat(sprintf('Percentage : %.1f%%\n', x * 100))
cat(sprintf('Scientific : %e\n', x))
cat(sprintf('Auto : %g\n', x))Lär dig R med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 43
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Formaterad utdata med sprintf()” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Formaterad utdata med sprintf()”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Formaterad utdata med sprintf()”?
Styr antal decimaler, utfyllnad och justering med sprintf-formatsträngar. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig R Academy?
Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Formaterad utdata med sprintf()”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här R Academy-lektionen?
Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Bygga strängar med paste() och paste0()
- Formaterad utdata med sprintf()
- Visa utdata med cat() och print()
- Utfyllnad och justering av strängar