[R] 형식문자

[R] 형식문자

앞으로 다양한 형식의 결과를 출력하려면 문장의 형식을 구성하는 것에 익숙해 져야 합니다. R에는 미리 준비된 치환자를 포함한 문자열에 스칼라값을 치환하여 결과를 만드는 방법으로 sprintf()함수를 제공하는데 이 때 사용되는 치환자를 형식문자라고 합니다.

#01. 정수형태의 형식문자 %d

1) 형식문자 사용하기

  • sprintf() 함수를 사용하여 형식문자가 포함된 문자열과 형식문자를 치환할 숫자값을 지정하여 완성된 문장을 반환한다.
  • 문자열 뒤에 형식문자의 수 만큼 정수값을 지정한다.

정수형태의 형식문자 사용하기

qty <- 5
price <- 3000
str <- "나는 사과 %d개를 %d원에 구입했다."
result <- sprintf(str, qty, price)
result  # -> jupyter에서는 변수 이름을 명시하는 것 만으로 결과값 출력이 가능함

💻 출력결과

나는 사과 5개를 3000원에 구입했다.

2) 정수의 자리수 설정

  • %자리수d 형식으로 형식문자를 구성한다.
  • 전체 자리수가 지정된 값으로 구성되고, 부족한 자리수는 공백이 적용된다.
  • 값은 오른쪽에 정렬된다.

정수의 자리수 설정하기

money <- 100
str <- "이번학기 등록금은 %7d만원이 넘습니다."
result <- sprintf(str, money)
result

💻 출력결과

이번학기 등록금은 100만원이 넘습니다.

3) 부족한 자리수를 0으로 채우기

  • %0자리수d 형식으로 구성한다. 0 이외의 다른 값은 채울 수 없다.

7자리의 영역에 3자리 숫자 출력하고 남는 공간을 0으로 채우기

money <- 100
str <- "이번학기 등록금은 %07d만원이 넘습니다."
result <- sprintf(str, money)
result

💻 출력결과

이번학기 등록금은 0000100만원이 넘습니다.

4) 올바르지 않은 형식을 적용할 경우 에러

실수를 정수 형식에 적용할 경우 에러 발생

qty <- 5.2
str <- "나는 사과를 %d개 구입했다."
result <- sprintf(str, qty)
result

💻 출력결과

Error in sprintf(str, qty): '%d' 유효하지 않은 포맷입니다; 수치형 객체들에는 포맷 %f, %e, %g 또는 %a를 사용해 주세요
Traceback:

1. sprintf(str, qty)

#02. 실수 형태의 형식문자 %f

1) 실수 형태의 값 표현하기

  • 소수점을 포함한 형태를 허용한다.
  • % + 글자가 일종의 특수문자로 인식되기 때문에 순수한 %를 출력하고자 하는 경우는 %%로 표시한다.
  • 기본적으로 소수점 아래 6자리를 표현한다.

2) 표현하려는 값이 소수점 6자리 미만인 경우

  • 소수점 6자리가 될 때 까지 0이 채워진다.

실수 표현하기

value <- 12.345
str <- "이번달 환율이 %f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 12.345000% 증가했습니다.

3) 표현하려는 값이 소수점 6자리를 초과하는 경우

소수점 7째 자리에서 반올림된다.

소수점 기본 자리수 반올림 (6째 자리까지만 표현함)

value <- 12.345678912345
str <- "이번달 환율이 %f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 12.345679% 증가했습니다.

4) 소수점 자리수 지정하기

  • %0.자리수f 형식으로 명시한다.
  • 지정된 자리수 보다 더 긴 자리수를 갖는 값이 사용될 경우 반올림 처리한다.
  • 자리수를 지정할 경우 기본6자리보다 더 많은 자리수도 설정 가능함.

소수점 자리수 지정하기 (1)

value <- 12.345

# 소수점 2째자리까지 표시하도록 설정함. --> 소수점 셋째 자리에서 반올림된다.
str <- "이번달 환율이 %0.2f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 12.35% 증가했습니다.

소수점 자리수 지정하기 (2)

value <- 12.3456789012345

# 소수점 10째자리까지 표시하도록 설정함. --> 소수점 11번째 자리에서 반올림된다.
str <- "이번달 환율이 %0.10f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 12.3456789012% 증가했습니다.

5) 실수의 전체 자리수 지정하기

  • %전체자리수.소수점자리수f 형식으로 정의한다.
  • ex) %7.2f인 경우 소수점을 포함한 전체 7자리 중에서 소수점 이하 두 자리를 사용한다는 의미가 된다.

실수의 전체 자리수 지정

value <- 12.234
str <- "이번달 환율이 %7.2f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 __12.23% 증가했습니다.

6) 빈 자리를 0으로 채우기

  • %0전체자리수.소수점자리수f 형식으로 정의한다.

빈 자리를 0으로 채우는 실수 표현

value <- 12.234
str <- "이번달 환율이 %07.2f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 0012.23% 증가했습니다.

#03. 문자열에 대한 형식 문자 %s

1) 문자열 표현하기

%s를 활용한 문자열 표현

value <- "R"
str <- "%s는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다."
result <- sprintf(str, value)
result

💻 출력결과

R는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다.

2) 자리수 지정하기

  • %자리수s 형식으로 표현
  • 부족한 자리수를 공백으로 채운다.
  • 내용은 오른쪽 정렬이 기본
  • 숫자형식과 다르게 빈 자리를 0이나 다른 글자로 채우는 기능은 없음.

문자열의 자리수 지정

value <- "R"
str <- "%7s는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다."
result <- sprintf(str, value)
result

💻 출력결과

______R는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다.

#04. 값을 왼쪽으로 정렬하기

1) 정수 형태의 왼쪽 정렬

  • %-자리수d 형식으로 자리수 앞에 - 기호를 추가한다.
  • 빈자리를 0으로 채우지 못한다. 0을 지정할 경우 공백으로 처리됨.

정수의 왼쪽 정렬

money <- 100
str <- "이번학기 등록금은 %-7d만원이 넘습니다."
result <- sprintf(str, money)
result

💻 출력결과

이번학기 등록금은 100____만원이 넘습니다.'

정수의 왼쪽 정렬과 빈자리를 0으로 채우기

money <- 100
str <- "이번학기 등록금은 %-07d만원이 넘습니다."
result <- sprintf(str, money)
result

💻 출력결과

이번학기 등록금은 100만원이 넘습니다.

2) 실수 값의 왼쪽 정렬

  • %-전체자리수.소수점자리수f

실수의 왼쪽 정렬

value <- 12.234
str <- "이번달 환율이 %-7.2f%% 증가했습니다."
result <- sprintf(str, value)
result

💻 출력결과

이번달 환율이 12.23__% 증가했습니다.

3) 문자열의 왼쪽 정렬

  • %-자리수s

문자열의 왼쪽 정렬

value <- "R"
str <- "%-7s은 데이터 분석과 시각화를 위한 프로그래밍 언어입니다."
result <- sprintf(str, value)
result

💻 출력결과

R______은 데이터 분석과 시각화를 위한 프로그래밍 언어입니다.

#05. 여러 가지 형식문자를 복합적으로 사용하기

  • sprintf() 함수에 형식문자를 포함한 문장을 첫 번째로 설정하고, 문장 내의 형식문자를 치환할 값들을 차례대로 설정한다.

형식문자 복합 사용

str <- "%s의 %s 점수는 %d점 입니다."

result1 <- sprintf(str, '철수', '국어', 92)
result1

result2 <- sprintf(str, '민수', '수학', 70)
result2

💻 출력결과

철수의 국어 점수는 92 입니다.
민수의 수학 점수는 70 입니다.
호쌤(이광호)'s Picture

About 호쌤(이광호)

메가스터디IT아카데미에서 Java, Spring, Python, Frontend 등을 강의하는 IT 전문 강사이자 프리렌서 개발자 입니다.
https://www.youtube.com/@hossam-codingclub

Seoul, Korea http://www.hossam.kr