R Academy · Lekcja

Formatowane wyjście za pomocą sprintf()

Kontroluj liczbę miejsc dziesiętnych, dopełnianie i wyrównanie za pomocą ciągów formatujących sprintf.

Lekcja 2 z 413 kroki

Formatowane wyjście za pomocą sprintf() to bezpłatna lekcja R Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Podstawy sprintf()

Funkcja sprintf() formatuje ciągi znaków za pomocą ciągu formatującego z symbolami zastępczymi. Działa dokładnie tak jak funkcja printf w języku C. Pierwszy argument to szablon formatu, a kolejne argumenty wypełniają symbole zastępcze w odpowiedniej kolejności.

sprintf('There are %d items', 5)
sprintf('Hello, %s!', 'Alice')
sprintf('Price: %.2f', 9.999)

Symbole zastępcze dla liczb całkowitych i ciągów znaków

%d formatuje liczbę całkowitą, %s formatuje ciąg znaków, a %f formatuje liczbę zmiennoprzecinkową. Każdy symbol zastępczy jest zastępowany w kolejności odpowiadającym mu argumentem.

name <- 'Bob'
age  <- 34
score <- 88.5
sprintf('%s is %d years old with score %.1f', name, age, score)

Kontrolowanie liczby miejsc dziesiętnych

%.2f oznacza formatowanie jako liczby zmiennoprzecinkowej z dokładnie 2 miejscami dziesiętnymi. Liczba między . a f określa precyzję. Jest to idealne rozwiązanie dla kwot, wartości procentowych i wartości naukowych.

pi_val <- 3.14159265
sprintf('%.0f', pi_val)
sprintf('%.2f', pi_val)
sprintf('%.5f', pi_val)
sprintf('$%.2f', 1234.5)

Szerokość pola i dopełnianie

Liczba przed literą formatu określa minimalną szerokość pola. Wartości są domyślnie wyrównywane do prawej i dopełniane spacjami z lewej strony. Jest to przydatne do wyrównywania kolumn w raportach tekstowych.

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]))
}

Wyrównanie do lewej za pomocą flagi -

W celu wyrównania tekstu do lewej w polu należy poprzedzić liczbę określającą szerokość znakiem -. Jest to standardowy sposób tworzenia kolumn wyrównanych do lewej w tekstowych danych wyjściowych o stałej szerokości.

# 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))

Notacja naukowa za pomocą %e i %g

%e wymusza notację naukową (np. 1.23e+04). %g automatycznie wybiera krótszy zapis spośród %f i %e — jest to przydatne, gdy wartości obejmują wiele rzędów wielkości.

x <- 0.000123456
y <- 123456789
sprintf('%e', x)
sprintf('%e', y)
sprintf('%g', x)
sprintf('%g', y)

Dopełnianie zerami za pomocą flagi 0

Poprzedzenie szerokości znakiem 0 powoduje dopełnianie liczb zerami z lewej strony zamiast spacjami. Jest to często używane w przypadku identyfikatorów, dat i numeracji plików z dopełnieniem zerami.

ids <- c(1, 12, 123, 1234)
sprintf('ID_%05d', ids)
# Date parts
sprintf('%04d-%02d-%02d', 2024, 5, 7)

Formatowanie wartości procentowych

Aby wyświetlić stosunek jako wartość procentową, należy pomnożyć go przez 100 i użyć %.1f%%. Podwójny znak %% wstawia do wyniku dosłowny znak procentu (pojedynczy % zostałby zinterpretowany jako początek symbolu zastępczego).

pass_rate <- 0.8743
sprintf('Pass rate: %.1f%%', pass_rate * 100)
growth <- 0.0523
sprintf('Growth: +%.2f%%', growth * 100)

sprintf() jest zwektoryzowana

Gdy do funkcji sprintf() przekaże się wektor jako argument, automatycznie iteruje ona po jego elementach i zwraca po jednym sformatowanym ciągu dla każdego elementu. Sam ciąg formatujący jest powtarzany.

products <- c('Apple', 'Banana', 'Cherry')
prices   <- c(0.99, 0.59, 2.49)
sprintf('%-8s costs $%.2f', products, prices)

Wiele symboli zastępczych i argumentów

Każdy symbol zastępczy wykorzystuje jeden argument w odpowiedniej kolejności. W jednym ciągu formatującym można dowolnie łączyć %d, %f i %s, a wszystkie argumenty wektorowe są powtarzane do długości najdłuższego z nich.

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() a paste() — kiedy używać każdej z nich

Funkcji paste()/paste0() należy używać do prostego łączenia ciągów, a sprintf(), gdy potrzebne jest precyzyjne formatowanie liczb (liczba miejsc dziesiętnych, szerokość, dopełnianie). Funkcja sprintf() jest bardziej rozbudowana, ale zapewnia pełną kontrolę nad wyglądem liczb.

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)

Szybkie sprawdzenie

Jaki kod formatu w funkcji sprintf() wstawia do wyniku dosłowny znak procentu %?

Najważniejsze informacje o sprintf()

Najważniejsze informacje o sprintf():

  • %d — liczba całkowita, %f — liczba zmiennoprzecinkowa, %s — ciąg znaków, %e — notacja naukowa, %g — wybór automatyczny
  • %.2f = 2 miejsca dziesiętne; %10.2f = szerokość 10, 2 miejsca dziesiętne
  • %-10s = wyrównanie do lewej w polu o długości 10 znaków; %05d = dopełnienie zerami do 5 cyfr
  • %% = dosłowny znak procentu w danych wyjściowych
  • Funkcja sprintf() jest zwektoryzowana względem swoich argumentów
  • Funkcji sprintf() należy używać zamiast paste(), gdy istotna jest precyzja formatowania liczb
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))
Bezpłatny start

Ucz się R dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
43
Lekcje
159

Często zadawane pytania

Czy lekcja „Formatowane wyjście za pomocą sprintf()” jest bezpłatna?

Tak — pełny tekst „Formatowane wyjście za pomocą sprintf()” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Formatowane wyjście za pomocą sprintf()”?

Kontroluj liczbę miejsc dziesiętnych, dopełnianie i wyrównanie za pomocą ciągów formatujących sprintf. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Formatowane wyjście za pomocą sprintf()”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowanie ciągów za pomocą paste() i paste0()
  2. Formatowane wyjście za pomocą sprintf()
  3. Wyświetlanie danych za pomocą cat() i print()
  4. Dopełnianie i wyrównywanie ciągów
← Powrót do R Academy