0Pricing
R Academy · 강의

수치 형식 간 변환

as.integer(), as.double(), as.numeric()을 안전하게 사용합니다.

수치 형식 간 변환은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

R에서 integer와 double 비교

R에는 두 가지 숫자 유형이 있습니다. integer는 정수이며 L 접미사로 만들고, double은 부동 소수점 유형으로 숫자 리터럴의 기본 유형입니다. 대부분의 경우 R은 double을 사용하지만, 유형 안전성과 메모리 효율을 위해 두 유형을 구분하는 것이 중요합니다.

x_dbl <- 5        # double by default
x_int <- 5L       # integer (L suffix)

cat('typeof(5):  ', typeof(x_dbl), '
')  # double
cat('typeof(5L): ', typeof(x_int), '
')  # integer
cat('5 == 5L:    ', x_dbl == x_int, '
') # TRUE (values equal)
cat('identical:  ', identical(x_dbl, x_int), '
')  # FALSE (types differ)

as.integer() — integer로 변환

as.integer(x)는 소수 부분을 절삭하여(반올림하지 않고) 값을 integer로 변환합니다. 따라서 3.9는 4가 아니라 3이 됩니다. L 접미사는 integer 리터럴을 위한 문법적 편의 표기입니다.

cat('as.integer(3.7):  ', as.integer(3.7), '
')   # 3 (truncated, not 4)
cat('as.integer(3.2):  ', as.integer(3.2), '
')   # 3
cat('as.integer(-2.9): ', as.integer(-2.9), '
')  # -2 (toward zero)
cat('as.integer(10.9): ', as.integer(10.9), '
')  # 10

# Compare with round
cat('round(3.7):        ', round(3.7), '
')       # 4

as.double()와 as.numeric()

as.double(x)와 as.numeric(x)은 서로 동일하며, 둘 다 값을 double(부동 소수점)으로 변환합니다. 소수점 이하의 정밀도가 필요할 때 integer를 double로 변환하는 데 사용하십시오.

count <- 7L  # integer
cat('typeof(count):         ', typeof(count), '
')

dbl_count <- as.double(count)
cat('typeof(as.double(7L)): ', typeof(dbl_count), '
')  # double
cat('Value:                 ', dbl_count, '
')           # 7

# Division automatically promotes to double
cat('7L / 2L:              ', 7L / 2L, '
')            # 3.5 (double)
cat('typeof(7L / 2L):      ', typeof(7L / 2L), '
')    # double

정수 산술

R의 정수 산술은 +, -, *에서는 integer를 생성하지만 /에서는 항상 double을 반환합니다. 따라서 정수 나눗셈의 결과도 integer로 유지될 것이라고 예상하면 당황할 수 있습니다.

a <- 6L
b <- 3L

cat('6L + 3L =', a + b, '| typeof:', typeof(a + b), '
')  # 9 integer
cat('6L - 3L =', a - b, '| typeof:', typeof(a - b), '
')  # 3 integer
cat('6L * 3L =', a * b, '| typeof:', typeof(a * b), '
')  # 18 integer
cat('6L / 3L =', a / b, '| typeof:', typeof(a / b), '
')  # 2 DOUBLE!
cat('6L %/% 3L =', a %/% b, '| typeof:', typeof(a %/% b), '
') # 2 integer

절삭과 반올림 비교

중요한 차이가 있습니다. as.integer()는 소수점을 버려 절삭하는 반면, round()는 가장 가까운 정수로 반올림합니다. 어떤 동작을 의도했는지 항상 명확하게 작성하십시오.

values <- c(2.1, 2.5, 2.9, -2.1, -2.5, -2.9)

cat('Original:     ', values, '
')
cat('as.integer():  ', as.integer(values), '
')  # truncate toward 0
cat('round():       ', round(values), '
')       # banker rounding
cat('floor():       ', floor(values), '
')       # round down
cat('ceiling():     ', ceiling(values), '
')     # round up

정수 오버플로 위험

R의 integer는 32비트이며 약 ±21억까지의 값을 저장할 수 있습니다. 이 범위를 초과하면 경고와 함께 NA가 됩니다. double은 훨씬 더 큰 값(최대 약 1.8 × 10^308)을 저장할 수 있습니다.

max_int <- .Machine$integer.max
cat('Max integer:', max_int, '
')  # 2147483647

# Overflow produces NA
cat('max_int + 1L:', max_int + 1L, '
')  # NA with warning

# Double handles it fine
cat('as.double(max_int) + 1:', as.double(max_int) + 1, '
')  # 2147483648

벡터에서의 L 접미사

각 요소에 L 접미사를 붙이거나 시퀀스를 as.integer()에 전달하여 integer 벡터를 만들 수 있습니다. 콜론 연산자 :는 자동으로 integer를 생성합니다.

# Colon produces integers
seq_int <- 1:5
cat('1:5 typeof:', typeof(seq_int), '
')  # integer

# Explicit integer vector
vec_int <- c(10L, 20L, 30L, 40L)
cat('c(10L,...) typeof:', typeof(vec_int), '
')  # integer

# as.integer on a vector
vec_dbl <- c(1.1, 2.9, 3.5, 4.7)
cat('as.integer(c(1.1,...)):', as.integer(vec_dbl), '
')  # 1 2 3 4

메모리와 성능

integer는 요소당 4바이트를 사용하고 double은 8바이트를 사용합니다. 매우 큰 정수 벡터에서는 integer를 사용하여 메모리 사용량을 절반으로 줄일 수 있습니다. 단, 유형이 섞인 산술 연산에서는 자동으로 double로 승격됩니다.

n <- 1000000L

vec_int <- 1:n          # integer: 4 bytes each
vec_dbl <- as.double(1:n)  # double: 8 bytes each

cat('Integer vector size:', object.size(vec_int), 'bytes
')
cat('Double vector size: ', object.size(vec_dbl), 'bytes
')
cat('Ratio:', as.numeric(object.size(vec_dbl)) / as.numeric(object.size(vec_int)), '
')

is.integer()로 integer 저장 확인

integer 저장인지 구체적으로 확인해야 할 때는 is.numeric()이 아니라 항상 is.integer()를 사용하십시오. L 접미사가 없는 숫자는 정수처럼 보여도 double입니다.

a <- 5    # looks like integer, but it is double
b <- 5L   # true integer

cat('is.integer(5):  ', is.integer(a), '
')   # FALSE!
cat('is.integer(5L): ', is.integer(b), '
')   # TRUE
cat('is.numeric(5):  ', is.numeric(a), '
')   # TRUE
cat('is.numeric(5L): ', is.numeric(b), '
')   # TRUE
cat('class(5):       ', class(a), '
')        # numeric
cat('class(5L):      ', class(b), '
')        # integer

변환 작업 흐름 예시

실용적인 작업 흐름은 다음과 같습니다. 기본값인 double로 데이터를 읽고 계산한 다음, 정수가 필요한 결과(예: 개수, 인덱스, ID)를 명시적으로 integer로 변환합니다.

# Simulated: reading counts as doubles (common from CSV)
counts_raw <- c(12.0, 8.0, 15.0, 3.0, 22.0)
cat('typeof raw:', typeof(counts_raw), '
')  # double

# Convert to integer for proper storage
counts_int <- as.integer(counts_raw)
cat('typeof converted:', typeof(counts_int), '
')  # integer
cat('Counts:', counts_int, '
')
cat('Total:', sum(counts_int), '
')

숫자 변환 요약

숫자 유형에 사용하는 주요 변환 함수는 다음과 같습니다.

  • as.integer(x) — integer로 절삭(소수점을 버리고 0을 향하는 방향으로 변환)
  • as.double(x) / as.numeric(x) — double로 변환
  • round(x) — 가장 가까운 값으로 반올림(integer와 같은 값에 사용)
  • floor(x) / ceiling(x) — 내림 / 올림
  • 5L 구문 — integer 리터럴(변환이 필요하지 않음)
  • 1:n — 항상 integer를 생성
x <- 7.8
cat('as.integer(7.8):', as.integer(x), '
')  # 7 (truncate)
cat('round(7.8):     ', round(x), '
')       # 8
cat('floor(7.8):     ', floor(x), '
')       # 7
cat('ceiling(7.8):   ', ceiling(x), '
')     # 8

빠른 확인

R에서 as.integer(3.9)는 무엇을 반환합니까?

복습: 숫자 유형 변환

훌륭합니다! 이번 레슨의 핵심 내용은 다음과 같습니다.

  • R에는 두 가지 숫자 유형이 있습니다. integer(L 접미사, 4바이트)와 double(기본값, 8바이트)입니다.
  • as.integer(x)는 0을 향하는 방향으로 절삭하며 반올림하지 않습니다.
  • as.double()와 as.numeric()은 동일하며 double로 변환합니다.
  • /는 피연산자가 integer여도 항상 double을 반환합니다.
  • 1:n은 integer 시퀀스를 만들고, L이 없는 숫자 리터럴은 double입니다.
  • 약 21억에서 integer 오버플로가 발생하므로 매우 큰 정수에는 double을 사용하십시오.
# Demonstrate truncation vs rounding
test_vals <- c(0.1, 0.5, 0.9, 1.5, 2.5, 3.7)
cat('Values:      ', test_vals, '
')
cat('as.integer(): ', as.integer(test_vals), '
')  # truncation
cat('round():      ', round(test_vals), '
')       # nearest (banker)

자주 묻는 질문

“수치 형식 간 변환” 강의는 무료인가요?

네 — “수치 형식 간 변환” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“수치 형식 간 변환”에서 뭘 배우나요?

as.integer(), as.double(), as.numeric()을 안전하게 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“수치 형식 간 변환” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. R의 형식 시스템 개요
  2. 수치 형식 간 변환
  3. 논리형과 문자형 변환
  4. 강제 변환의 함정과 모범 사례
← R Academy(으)로 돌아가기