728x90
반응형

통계나 데이터 분석을 공부하다 보면 반드시 만나게 되는 프로그래밍 언어가 있다. 바로 "R"이다.
R은 통계 계산, 시각화, 모델링 등 수치 기반 분석을 위해 설계된 언어로, 학계와 실무 모두에서 여전히 널리 쓰인다.
이번 글에서는 R을 처음 접하는 사람들을 위해 다음 세 가지를 중심으로 소개한다.
- R의 데이터 타입
- R의 기본 문법 (연산자)
- R의 주요 데이터 구조 (벡터, 행렬, 배열, 리스트, 데이터프레임)
1. R의 데이터 타입
R에서 데이터를 다룰 때 가장 먼저 이해해야 할 개념이 "데이터 타입"이다. R의 기본 데이터 타입은 다음과 같다.
| 타입 | 설명 | 예시 |
| numeric | 숫자형 (실수 포함) | 3, 3.14 |
| integer | 정수형 | 10L (L을 붙여야 정수로 인식) |
| character | 문자열 | "hello", "R" |
| logical | 논리형 (TRUE/FALSE) | TRUE, FALSE |
| complex | 복소수형 | 1+2i |
특수 타입
| NA | 결측값 (Not Available), 데이터가 있지만 비어 있음 |
| NaN | 수학적으로 정의되지 않은 값 (Not a Number) |
| NULL | 아예 존재하지 않음 (길이 0), 변수 자체가 비어 있음 |
타입을 확인할 땐 class() 또는 typeof() 함수를 사용하면 된다.
x <- 3.14 class(x) # "numeric" typeof(x) # "double"
2. R의 기본 문법: 연산자
R은 수학적/논리적 연산을 매우 직관적으로 지원한다.
산술 연산자
| 덧셈 | + | 2 + 3 |
| 뺄셈 | - | 5 - 1 |
| 곱셈 | * | 4 * 2 |
| 나눗셈 | / | 6 / 3 |
| 거듭제곱 | ^ | 2^3 → 8 |
| 나머지 | %% | 7 %% 3 → 1 |
| 정수 몫 | %/% | 7 %/% 3 → 2 |
비교 연산자
| 같음 | == | 값이 같은지 비교 |
| 다름 | != | 값이 다른지 비교 |
| 크기 비교 | <, >, <=, >= | 크기 비교 |
| 타입 확인 (모든 데이터타입에 쓸 수 있음) |
is.numeric(x) | 숫자형인지 |
| is.na(x) | NA인지 | |
| is.null(x) | NULL인지 |
대입 연산자
R에서는 변수를 정의할 때 다음과 같은 기호를 사용할 수 있다
| <- | 가장 일반적인 대입 방법 | x <- 5 |
| = | 함수 인자 또는 변수 대입 | y = 10 |
| <<- | 지역 환경 바깥 변수에 할당 | 전역 <<- 100 |
일반적으로 <-을 가장 많이 사용하며, <<-은 함수 내부에서 외부 환경의 변수를 수정할 때 쓰인다.
기타 연산자
| %in% | 포함 여부 검사 | "a" %in% c("a", "b") → TRUE |
| & | 논리 AND | TRUE & FALSE → FALSE |
| | | 논리 OR | TRUE & FALSE → TRUE " 하나라도 TRUE이면 전체가 TRUE" |
| ! | 논리 NOT | !TRUE → FALSE |
3. R의 데이터 구조
(1) 벡터 (Vector)
- 가장 기본적인 데이터 구조, 1차원
- 같은 타입의 값만 저장할 수 있음
- 생성: c(1, 2, 3), c("a", "b", "c")
v <- c(3, TRUE, FALSE) #c : concatenate의 c로, 데이터를 묶을 수 있다.
## 출력 : 3 1 0
v1 <- c(1:6)
## 출력 : 1 2 3 4 5 6
(2) 행렬 (Matrix)
- 2차원 구조이며, 모든 요소는 같은 타입이어야 함 (그렇지 않으면 자동으로 타입이 변환됨)
- 생성 시 matrix() 함수 사용
m <- matrix(1:6, nrow = 2, ncol = 3) #nrow, ncol 중 하나만 지정해도 된다.
##출력##
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
- 기본적으로 값은 열(column)을 기준으로 채워진다
- byrow = TRUE 옵션을 추가하면 행(row) 기준으로 채워진다.
m2 <- matrix(1:6, nrow=2, byrow=TRUE)
##출력##
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
- 벡터를 행렬로 바꾸려면 dim()을 사용하여 차원을 지정할 수 있다.
v <- c(1:6)
dim(v) <- c(2, 3) # 2행 3열 행렬로 변환
##출력##
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
(3) 배열 (Array)
- 3차원 이상을 다루는 자료 구조
- array()를 이용해 생성할 수 있다.
- dim 옵션을 지정하지 않으면 단순 벡터(1차원)로 처리된다.
a <- array(c(1:12), dim = c(2, 3, 2)) # 3차원 배열
##출력##
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
(4) 리스트 (List)
- 서로 다른 타입, 구조를 가진 데이터들을 묶을 수 있음
- 벡터, 행렬, 배열, 숫자형, 문자열 등을 모두 포함 가능
lst <- list(
num = 3.14,
vec = c(1, 2, 3),
mat = matrix(1:4, 2),
arr = array(1:8, dim = c(2, 2, 2))
)
- 리스트의 각 요소는 $, [[ ]], [ ]로 접근 가능
mylist <- list(name = "Alice", age = 30)
mylist$name # "Alice"
mylist$age # 30
mylist[[1]] # "Alice". R의 벡터는 시작 인덱스 값을 1로 갖는다.
mylist[["name"]] # "Alice"
mylist[1] # 리스트로 반환: list("Alice"). 결과가 다시 리스트 형태로 유지됨
mylist["name"] # list("Alice")
(5) 데이터프레임 (Data Frame)
- 2차원 구조를 갖는 관계형 데이터 구조
- 행렬처럼 생겼지만, 열마다 다른 데이터 타입을 가질 수 있다
- 각각의 열은 내부적으로 벡터로 구성됨
- 특정 열 추출: df$name 또는 df[["name"]]
- 행 접근: df[1, ], 열 접근: df[, 2]
df <- data.frame( name = c("Kim", "Lee"), age = c(22, 25), pass = c(TRUE, FALSE) )
마무리 요약표
| 구조 | 차원 | 타입 제약 | 특징 |
| vector | 1D | 하나의 타입 | 가장 기본 단위 |
| matrix | 2D | 하나의 타입 | 열 기준으로 채워짐 (행 기준: byrow=TRUE) |
| array | nD | 하나의 타입 | 다차원, dim()으로 지정 |
| list | 1D | 여러 타입 가능 | 다양한 객체를 함께 저장 가능 |
| data.frame | 2D | 열마다 타입 다름 | 관계형 데이터에 적합, 가장 많이 사용 |
728x90
반응형
'PROGRAMMING > CODING' 카테고리의 다른 글
| [R] 기초 3편. 통계 분석에 사용되는 R 함수 한 번에 총정리하기 (8) | 2025.08.07 |
|---|---|
| [R] 기초 2편. 내장 함수, 데이터 핸들링, 제어문까지 한 번에 정리하기 (4) | 2025.08.06 |
| 텍스트 마이닝 핵심 용어 정리 – 스태밍, 토큰화, 임베딩까지 쉽게 이해하기 (10) | 2025.07.10 |
| [Anaconda3] 아나콘다 터미널 명령어 모음 (0) | 2023.06.01 |
| [Anaconda3] 아나콘다 가상환경 위치 바꾸기 (User 말고 드라이브에) (0) | 2023.06.01 |
댓글