쭈쌤
쭈쌤 Hello World

[R] 형식문자

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 형식문자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R] 형식문자

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

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

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

문자열 뒤에 형식문자의 수 만큼 정수값을 지정한다.

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

1) 정수의 자리수 설정

  • %자리수d 형식으로 형식문자를 구성한다.
  • 전체 자리수가 지정된 값으로 구성되고, 부족한 자리수는 공백이 적용된다.
  • 값은 오른쪽에 정렬된다.
1
2
3
4
money <- 100
str <- "이번학기 등록금은 %7d만원이 넘습니다."
result <- sprintf(str, money)
result
▶ 출력결과
1
이번학기 등록금은     100만원이 넘습니다.

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

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

1
2
3
4
money <- 100
str <- "이번학기 등록금은 %07d만원이 넘습니다."
result <- sprintf(str, money)
result
▶ 출력결과
1
이번학기 등록금은 0000100만원이 넘습니다.

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

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

1
2
3
4
qty <- 5.2
str <- "나는 사과를 %d개 구입했다."
result <- sprintf(str, qty)
result
▶ 출력결과
1
2
3
4
5
Error in sprintf(str, qty): '%d'는 유효하지 않은 포맷입니다; 수치형 객체들에는 포맷 %f, %e, %g 또는 %a를 사용해 주세요
Traceback:


1. sprintf(str, qty)

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

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

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

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

1
2
3
4
value <- 12.345
str <- "이번달 환율이 %f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이 12.345000% 증가했습니다.

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

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

1
2
3
4
value <- 12.345678912345
str <- "이번달 환율이 %f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이 12.345679% 증가했습니다.

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

%0.자리수f 형식으로 명시한다.

지정된 자리수 보다 더 긴 자리수를 갖는 값이 사용될 경우 반올림 처리한다.

자리수를 지정할 경우 기본6자리보다 더 많은 자리수도 설정 가능함.

1
2
3
4
5
6
value <- 12.345

# 소수점 2째자리까지 표시하도록 설정함. --> 소수점 셋째 자리에서 반올림된다.
str <- "이번달 환율이 %0.2f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이 12.35% 증가했습니다.
1
2
3
4
5
6
7
value <- 12.3456789012345

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

4) 소수점의 전체 자리수 지정하기

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

예를 들어 %7.2f%인 경우 소수점을 포함한 전체 7자리 중에서 소수점 이하 두 자리를 사용한다는 의미가 된다.

1
2
3
4
value <- 12.234
str <- "이번달 환율이 %7.2f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이   12.23% 증가했습니다.

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

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

1
2
3
4
value <- 12.234
str <- "이번달 환율이 %07.2f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이 0012.23% 증가했습니다.

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

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

1) 자리수 지정하기

%자리수s 형식으로 표현

  • 부족한 자리수를 공백으로 채운다.
  • 내용은 오른쪽 정렬이 기본
  • 숫자형식과 다르게 빈 자리를 0이나 다른 글자로 채우는 기능은 없음.
1
2
3
4
value <- "R"
str <- "%7s는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
      R는 데이터 분석과 시각화를 위한 프로그래밍 언어입니다.

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

1) 정수 형태의 왼쪽 정렬

%-자리수d 형식으로 자리수 앞에 - 기호를 추가한다.

빈자리를 0으로 채우지 못한다. 0을 지정할 경우 공백으로 처리됨.

1
2
3
4
money <- 100
str <- "이번학기 등록금은 %-7d만원이 넘습니다."
result <- sprintf(str, money)
result
▶ 출력결과
1
이번학기 등록금은 100    만원이 넘습니다.'
1
2
3
4
money <- 100
str <- "이번학기 등록금은 %-07d만원이 넘습니다."
result <- sprintf(str, money)
result
▶ 출력결과
1
이번학기 등록금은 100    만원이 넘습니다.

2) 실수 값의 왼쪽 정렬

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

1
2
3
4
value <- 12.234
str <- "이번달 환율이 %-7.2f%% 증가했습니다."
result <- sprintf(str, value)
result
▶ 출력결과
1
이번달 환율이 12.23  % 증가했습니다.

3) 문자열 값의 왼쪽 정렬

%-자리수s

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

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

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

1
2
3
4
5
6
7
str <- "%s의 %s 점수는 %d점 입니다."

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

result2 <- sprintf(str, '민수', '수학', 70)
result2
▶ 출력결과
1
2
철수의 국어 점수는 92점 입니다.
민수의 수학 점수는 70점 입니다.
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 형식문자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus