Sprintf
실수를 형식(소수점 이하 숫자 갯수 등)에 맞춰서 출력하기
x1 <- c(0, -1, exp(1), -pi*10, exp(1)*1e+6)
x2 <- c(0, 1, 314, 9923, -1123224)
x3 <- c(0, 314.413, pi*100, -1123224*0.123)
print(x1); print(x2); print(x3)
## [1] 0.000000e+00 -1.000000e+00 2.718282e+00 -3.141593e+01 2.718282e+06
## [1] 0 1 314 9923 -1123224
## [1] 0.0000 314.4130 314.1593 -138156.5520
- 벡터
x1
,x2
,x3
에는 실수가 담겨 있다. 이를 출력한 결과는 어지럽고, 난잡하다. 좀 더 깔끔하고 보기 쉽게 출력할 수 없을까?
x1 <- c(0, -1, exp(1), -pi*10, exp(1)*1e+6)
x2 <- c(0, 1, 314, 9923, -1123224)
x3 <- c(0, 314.413, pi*100, -1123224*0.123)
sprintf("%6.2f", x1); sprintf("%6.2f", x2); sprintf("%6.2f", x3);
## [1] " 0.00" " -1.00" " 2.72" "-31.42" "2718281.83"
## [1] " 0.00" " 1.00" "314.00" "9923.00" "-1123224.00"
## [1] " 0.00" "314.41" "314.16" "-138156.55"
"%6.2f"
는 숫자를 어떤 형식에 맞춰서 출력할 것인지를 나타낸다.- 이런 형식은
%
로 시작해서aAdifeEgGosxX
중의 한 문자로 끝나야 한다.[sprintf1] f
의 경우 소수를 나타내며,.2
의2
는 소수점 이하 숫자의 갯수를 나타낸다.f
대신a
,A
,d
,i
,e
,E
,g
,G
,o
,s
,x
,X
중의 하나가 올 수 있다.d
또는i
는 정수(integer)를 의미한다..2
는 무시된다. (정수는 소수점 이하가 모두0
인 수이다.)
- 이런 형식은
- 우선 소수(
f
)를 나타내는 경우의 형식을 살펴보자."%6.2f"
의6
은 숫자가 문자열에서 차지하는 문자의 갯수가 된다. 이때 주의할 점은 수가 너무 크거나, 너무 작아서6
자리 문자로 나타내기 힘들 경우에는 문자의 갯수가 늘어날 수도 있다. 예를 들어,1000000
을 6자리에 맞추려고000000
로 바꾸지는 않는다는 것이다."%6.2f"
의.2
는 소수점 이하의 숫자 갯수를 나타낸다. 만약3.14159
라는 숫자를"%6.2f"
의 형식으로 표시하면3.14
가 된다.3.14
앞의 공란 두 개에 주목하자. 처음 문자 갯수는 6개이다.- 공란을
0
으로 채우려면"%06.2f"
로 바꾸고,+
또는-
를 항상 쓰려면%+6.2f
로 쓴다. - 소수점 이하 숫자가 2개일 때, 공란을 어디에 채우느냐는 선택할 수 있다. 기본적으로 앞쪽에 공란을 채웠지만(
3.14
), 뒤 쪽에 채우려면(3.14
)"%-6.2f"
로 쓴다. 이때-
는 음수의 의미가 아님을 주의하자. 0
,-
,+
는 혼용될 수 있다.
sprintf(c("%10.2f", "%010.2f", "%+10.2f", "%+010.2f"), pi) # 우측 정렬
## [1] " 3.14" "0000003.14" " +3.14" "+000003.14"
sprintf(c("%-10.2f", "%-+10.2f"), pi) # 좌측 정렬
## [1] "3.14 " "+3.14 "
sprintf(c("%10.2f", "%+10.2f"), pi*1000000) # 좌측 정렬
## [1] "3141592.65" "+3141592.65"
[sprintf1]: sprintf
에서 %
는 숫자 형식을 나타내기 때문에, 문자 %
를 출력하려면 %
과 다른 방법이 필요하다. sprintf
에서는 %%
로 간단하게 해결하였다. 따옴표(""
) 안에서 \
로 시작하는 경우 제어문자를 나타내기 때문에 문자 \
를 나타내기 위해서 \\
를 쓰는 것과 비슷하다.
Leave a comment