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