[프로그래밍] R과 전형적인 프로그래밍 언어의 차이점: 벡터와 인덱싱
프로그래밍을 하다 보면 R이 다른 전형적인 언어(C, Python, Java 등)와 다르게 동작하는 부분이 많다는 것을 알 수 있습니다. 특히 R은 **벡터화(Vectorization)**와 **논리 인덱싱(Logical Indexing)**을 기본적으로 지원하여, 데이터를 다루는 방식이 다릅니다. 이번 글에서는 R과 전형적인 프로그래밍 언어의 차이점을 정리해 보겠습니다.
1. R은 벡터 연산을 기본으로 한다
R에서는 벡터 연산을 기본적으로 지원하여, 반복문 없이도 전체 데이터를 쉽게 처리할 수 있습니다. 반면, 다른 언어에서는 for
문을 사용해야 하는 경우가 많습니다.
📌 예제: R과 Python의 차이
✅ R에서 벡터 연산
x <- c(1, 2, 3, 4, 5)
y <- x * 2 # 벡터 전체에 연산 적용
print(y)
# [1] 2 4 6 8 10
🚫 Python에서 반복문 사용
x = [1, 2, 3, 4, 5]
y = [i * 2 for i in x] # 리스트 컴프리헨션 필요
print(y)
# [2, 4, 6, 8, 10]
📌 Python에서도 numpy
를 사용하면 벡터 연산이 가능하지만, 기본적으로 리스트는 반복문을 사용해야 합니다.
2. 논리 인덱싱(Logical Indexing) 지원
대부분의 언어는 조건문과 for
문을 사용해 요소를 필터링해야 하지만, R에서는 논리 벡터를 이용한 직관적인 인덱싱이 가능합니다.
📌 예제: 특정 조건의 요소 필터링
✅ R에서 논리 인덱싱
x <- c(10, 20, 30, 40, 50)
filtered <- x[x > 25] # 조건을 바로 적용
print(filtered)
# [1] 30 40 50
🚫 C에서 for
문 사용
#include <stdio.h>
int main() {
int x[] = {10, 20, 30, 40, 50};
int size = 5;
for (int i = 0; i < size; i++) {
if (x[i] > 25) {
printf("%d ", x[i]);
}
}
return 0;
}
📌 R은 한 줄로 끝나지만, C에서는 for
문과 조건문이 필요합니다.
3. for
문보다 벡터 연산이 빠르다
R에서는 for
문을 사용하면 성능이 떨어지는 경우가 많습니다. 대신 **벡터화 연산(Vectorized Operations)**을 활용하는 것이 성능 면에서 유리합니다.
📌 예제: for
문 대신 sapply()
사용
✅ R에서 벡터화 연산 (sapply
)
x <- c(1, 2, 3, 4, 5)
y <- sapply(x, function(i) i * 2)
print(y)
# [1] 2 4 6 8 10
🚫 Python에서는 리스트 컴프리헨션 필요
x = [1, 2, 3, 4, 5]
y = [i * 2 for i in x] # 리스트 컴프리헨션 필요
print(y)
# [2, 4, 6, 8, 10]
📌 R에서는 sapply()
, lapply()
, map()
등의 함수형 프로그래밍 스타일을 사용하여 루프 없이 반복 연산을 할 수 있습니다.
4. R과 전형적인 프로그래밍 언어의 비교
특징 | R | 전형적인 언어 (C, Python, Java 등) |
---|---|---|
벡터 연산 | 기본적으로 지원 | for 문 필요 (Python의 numpy 사용 가능) |
논리 인덱싱 | 지원 (x[x > 0] ) |
for 문 또는 필터링 함수 필요 |
루프 사용 | 권장되지 않음 (apply() 계열 함수 사용) |
for 문이 기본적인 접근 방식 |
배열 기본 타입 | 벡터(Vector) | 리스트(List), 배열(Array) 등 |
🔥 결론: R은 벡터화 프로그래밍을 기본으로 하는 언어
🎯 R은 데이터 분석을 위해 설계된 언어이기 때문에, 반복문보다 벡터 연산과 논리 인덱싱을 적극 활용하는 것이 유리합니다! 🚀
댓글
댓글 쓰기