변수 할당 연산자
R에서 변수에 값을 할당하는 방법은 세 가지입니다.
x <- 10 # 가장 일반적인 방식
x = 10 # 파이썬처럼 사용 가능하지만 권장하지 않음
10 -> x # 오른쪽 방향 할당, 거의 쓰지 않음
셋 다 동작하지만 R에서는 <-를 표준으로 사용합니다.
=는 함수 인자를 전달할 때 사용하는 기호와 겹쳐서 코드가 길어지면 헷갈릴 수 있습니다.
RStudio에서는 Alt + - (Mac: Option + -) 단축키로 <-를 빠르게 입력할 수 있습니다.
=와 <-의 실질적인 차이가 드러나는 경우가 있습니다.
# 함수 호출 시 = 는 인자 전달로만 동작
mean(x = c(1, 2, 3)) # x는 전역 환경에 저장되지 않음
# <- 는 전역 환경에 변수를 만들면서 전달
mean(x <- c(1, 2, 3)) # x가 전역 환경에 저장됨
일반적으로는 <-로 변수 할당, =는 함수 인자 전달로 구분해서 쓰는 것이 가독성 면에서 낫습니다.
변수명 규칙
my_var <- 1 # 권장 (스네이크 케이스)
my.var <- 1 # 허용 (R에서 .은 변수명에 사용 가능)
myVar <- 1 # 허용 (카멜 케이스)
.hidden <- 1 # 허용 (.으로 시작하면 ls()에서 숨겨짐)
2x <- 1 # 오류: 숫자로 시작 불가
my-var <- 1 # 오류: 하이픈 사용 불가
my var <- 1 # 오류: 공백 사용 불가
R은 대소문자를 구분합니다.
Value와 value는 서로 다른 변수입니다.
파이썬과 마찬가지로 스네이크 케이스(my_var)를 권장하는 편이지만, R 코드에서는 점(.)을 구분자로 쓰는 방식(my.var)도 흔하게 볼 수 있습니다.
R 변수의 특징
동적 타이핑
선언 없이 바로 값을 할당하면 타입이 자동으로 결정됩니다.
같은 변수에 다른 타입의 값을 재할당할 수도 있습니다.
x <- 10
x <- "hello" # 오류 없이 재할당 가능
x <- TRUE
벡터화 (Vectorization)
R의 가장 큰 특징 중 하나입니다. 단일 값도 사실 길이 1짜리 벡터로 취급하며, 벡터에 연산을 하면 각 원소에 자동으로 적용됩니다.
x <- c(1, 2, 3, 4, 5)
x * 2 # [1] 2 4 6 8 10
x + 10 # [1] 11 12 13 14 15
x > 3 # [1] FALSE FALSE FALSE TRUE TRUE
반복문 없이 벡터 전체에 연산을 한 번에 적용할 수 있어서 코드가 간결해지고, 내부적으로 최적화되어 있어 속도도 빠릅니다.
값 복사
R은 변수를 다른 변수에 할당하면 값이 복사됩니다.
한쪽을 변경해도 다른 쪽에 영향을 주지 않습니다.
파이썬의 리스트가 참조를 공유하는 것과 다른 동작입니다.
a <- c(1, 2, 3)
b <- a
b[1] <- 99
a # [1] 1 2 3 → 변경되지 않음
b # [1] 99 2 3
기본 데이터 타입
R의 기본 데이터 타입은 다음과 같습니다.
| 타입 | 설명 | 예시 |
| numeric | 실수 (double 포함) | 3.14, 10 |
| integer | 정수 | 10L |
| double | 배정밀도 부동소수점 | 3.14 |
| complex | 복소수 | 2+3i |
| character | 문자열 | "hello" |
| logical | 논리값 | TRUE, FALSE |
a <- 3.14 # numeric (double)
b <- 10L # integer (L을 붙여야 정수로 저장)
c <- 2 + 3i # complex
d <- "hello" # character
e <- TRUE # logical
10과 10L의 차이는 저장 방식입니다.
10은 double로 저장되고 10L은 integer로 저장됩니다.
일반적인 분석에서는 크게 신경 쓰지 않아도 되지만, 메모리를 아껴야 하거나 정수임을 명시해야 할 때는 구분합니다.
타입 확인
class()
객체의 클래스(상위 수준의 타입)를 반환합니다. 가장 많이 사용하는 타입 확인 함수입니다.
class(3.14) # "numeric"
class(10L) # "integer"
class("hello") # "character"
class(TRUE) # "logical"
class(2 + 3i) # "complex"
typeof()
내부 저장 방식(하위 수준의 타입)을 반환합니다. class()와 결과가 다를 수 있습니다.
typeof(3.14) # "double"
typeof(10L) # "integer"
typeof(TRUE) # "logical"
class(3.14)는 "numeric"을 반환하지만 typeof(3.14)는 "double"을 반환합니다.
일반적인 용도에서는 class()를 주로 사용합니다.
is.*() 함수
특정 타입인지 확인해서 TRUE/FALSE를 반환합니다.
is.numeric(3.14) # TRUE
is.integer(10L) # TRUE
is.character("hi") # TRUE
is.logical(TRUE) # TRUE
is.double(3.14) # TRUE
조건 처리나 함수 내 타입 검증에서 자주 사용합니다.
타입 변환
as.*() 함수로 타입을 변환합니다.
as.numeric("3.14") # 3.14
as.integer(3.7) # 3 (소수점 이하 버림)
as.character(100) # "100"
as.logical(0) # FALSE
as.logical(1) # TRUE
as.logical("TRUE") # TRUE
변환이 불가능한 경우 NA를 반환하고 경고 메시지가 출력됩니다.
as.numeric("hello") # NA (경고: NAs introduced by coercion)
as.integer("abc") # NA
타입 변환은 데이터를 불러온 뒤 컬럼 타입이 예상과 다를 때 자주 사용합니다.
예를 들어 CSV에서 숫자 컬럼이 문자로 읽힌 경우 as.numeric()으로 변환하는 식입니다.
'BI&Programming-Tools > R' 카테고리의 다른 글
| [R 기초] 6. 데이터 구조 (행렬, 데이터프레임) (0) | 2026.06.28 |
|---|---|
| [R 기초] 5. 데이터 구조 (벡터, 팩터, 리스트) (0) | 2026.06.28 |
| [R 기초] 4. 논리형과 결측값 (0) | 2026.06.28 |
| [R 기초] 3. 수와 문자 다루기 (0) | 2026.06.27 |
| [R 기초] 1. R 개념과 RStudio 환경 (0) | 2026.06.27 |
