R Academy · Lektion

Formaterad utdata med sprintf()

Styr antal decimaler, utfyllnad och justering med sprintf-formatsträngar.

Lektion 2 av 413 steg

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():

  • %d heltal, %f flyttal, %s sträng, %e vetenskaplig notation, %g automatiskt 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 resultatet
  • sprintf() är vektoriserad över sina argument
  • Föredra sprintf() framför paste() 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))
Gratis att börja

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

  1. Bygga strängar med paste() och paste0()
  2. Formaterad utdata med sprintf()
  3. Visa utdata med cat() och print()
  4. Utfyllnad och justering av strängar
← Tillbaka till R Academy