프로그램_시스템/데이터

[ADsP] R 기본 문법

9191 2026. 5. 29. 17:08

연산자

대입 연산자

<- , <<- , = 오른쪽 값을 왼쪽에 대입
-> , ->> 왼쪽 값을 오른쪽에 대입

 

a <- 'abc'
"adsp" -> b
number1 <<- 10
Inf ->> d
logical = NA

 

비교 연산자

== 두 값이 같은지 비교
! = 두 값이 다른지를 비교
< , > 초과, 미만을 비교
< = , = > 이상, 이하를 비교
is.character 문자형인지 아닌지를 비교
is.numeric 숫자형인지 아닌지를 비교
is.logical 논리형인지 아닌지를 비교
is.na NA인지 아닌지를 비교
is.null NULL인지 아닌지를 비교

 

a == 'abc'
a != 'abcdefg'
b > 'adsp'
number1 <= 20
is.na(logical)
is.null(NULL)

 

출력값은 TRUE, FALSE로 나옴

 

산술 연산자

+ 두 숫자의 덧셈 (*문자끼리 덧셈 : ‘A’ + ‘B’)
- 두 숫자의 뺄셈
* 두 숫자의 곱셈
/ 두 숫자의 나눗셈 (소수점까지 표현)
%/% 두 숫자의 나눗셈의 몫
%% 두 숫자의 나눗셈의 나머지
^ , ** 거듭제곱
exp( ) 자연상수의 거듭제곱

 

7+3
7-3
7*3
7/3
7%/%3
7%%3

# 벡터 길이가 다를 경우, 긴 것을 기준으로 반복 연산함
x = c(1, 2, 3)
y = c(1, 2, 3, 4, 5, 6)
x + y	# 2, 4, 6, 5, 7, 9

 

논리 연산자

! 부정 연산자 : 현재의 논리값에 반대되는 값
& AND 연산자 : 두 값이 모두 참일 때만 참
| OR 연산자 : 둘 중 하나의 값만 참이더라도 참

 

!TRUE
TRUE&TRUE
TRUE&FALSE
!(TRUE&FALSE)
TRUE|FALSE

 

출력값은 TRUE, FALSE로 나옴

 

내장 함수

기본 함수

help ( ) 또는 ? 함수들의 도움말 확인
paste ( ) 문자열 이어 붙이기
seq ( ) 시작값, 끝값, 간격으로 수열 생성
rep ( ) 주어진 데이터를 일정 횟수만큼 반복
rm ( ) 대입 연산자에 의해 생성된 변수 삭제
ls ( ) 현재 생성된 변수들의 리스트 확인
print ( ) 해당 값을 콘솔창에 출력

 

help (paste)
?paste  
paste('banana','juice')	# "banana juice"
seq(1,16,2)	#  1  3  5  7  9 11 13 15
rep(1,6)	# 1 1 1 1 1 1
rm(a)	# aError: object 'a' not found
ls() # "b" "d" "logical" "number1"
print(5)

 

통계 함수

sum 값의 합
mean 값의 평균
median 값의 중앙값
var 값의 표본 분산
sd 값의 표본 표준편차
summary 값의 요약값
range 값의 최솟값과 최댓값

 

vector1 <- c(1:9)

sum(vector1)	# 45
mean(vector1)	# 5
median(vector1)	# 5
var(vector1)	# 7.5
sd(vector1)		# 2.738613
summary(vector1)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#       1       3       5       5       7       9 
range(vector1)	# 1 9

 

데이터 핸들링

벡터형 변수

a = c("a","b","c","d")
a[2]	# "b"
a[-4]	# "a" "b" "c"	# 해당하는 값만 제외하고 나머지를 불러옴
a[c(2,3)]	# "b" "c"	# c함수와 함께 사용하면 여러 개를 불러올 수 있음

 

데이터 이름 변경

v1 <- matrix(c(1:6),nrow=2)
colnames(v1) <- c('a1','a2','a3')	# 열 이름 지정
rownames(v1) <- c('b1','b2')		# 행 이름 지정

 

데이터 추출/결합 응용

v2 <- matrix(c(1:6),nrow=3)
v2[3,2]	# 6	# 원하는 위치의 데이터 찾기

colnames(v2) <- c('c1','c2')
rownames(v2) <- c('r1','r2','r3')

v2[,'c1']	# 1 2 3	# 이름을 지정해주면 그 이름의 행/열로도 데이터 찾기 가능
v2['r3','c2']	# 6

 

행렬끼리, 데이터프레임끼리는 행 또는 열의 수가 같을 경우 결합할 수 있다.

벡터끼리의 결합에서는 재사용 규칙으로 인해, 부족한 데이터를 재활용해 반환한다.

r1 <- c(1,2,3)
r2 <- c(4,5,6,7,8)

rbind(r1,r2)
#    [,1] [,2] [,3] [,4] [,5]
# r1    1    2    3    1    2
# r2    4    5    6    7    8
# Warning message:
# In rbind(r1, r2) :
#   number of columns of result is not a multiple of vector length (arg 1)

 

제어문

반복문

for 반복문

괄호 안의 조건 하에서 1값을 하나씩 증가시키며 중괄호 { } 안의 구문을 반복 실행한다.

주로 반복할 횟수를 지정해 반복시킬 때 사용!

e = c()	# 아무런 값도 포함되지 않는 벡터 선언
for (i in 1:9) {
	e[i] = i * i
}

# e 값을 출력하면 1 4 9 16 25 36 49 64 81

 

while 반복문

괄호 안의 조건 하에서 중괄호 { } 안의 구문을 반복 실행한다.

주로 조건에 부합할 시에만 반복시킬 때 사용!

f = 1
while(f<5){
	f=f+1
	print(f)
}

 

조건문

만약 조건에 부합한다면 실행, else라면 다른 실행을 하도록 하는 구문.

else 뒤에 조건문을 추가해서 계속 중첩시킬 수도 있다.

score = c(88, 90, 78, 84, 76, 68, 50, 48, 33, 70, 48,
 66, 88, 96, 79, 65, 27, 88, 96, 33, 64, 48, 77, 18, 26, 44,
 48, 68, 77, 64, 88, 95, 79, 88, 49, 30, 29, 10, 49, 88)

over70 = rep (0, 40)
for (i in 1:40) {
   if (score[i] >= 70) {
     over70[i] <- 1
   } else {
     over70[i] <- 0
   }
}

over70 
# [1] 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0
# [29] 1 0 1 1 1 1 0 0 0 0 0 1
sum(over70)
# [1] 18

 

사용자 정의 함수

사용자가 직접 함수를 만들어, 이후에 사용할 수 있도록 정의해 사용하는 함수.

# 인수 a까지의 합을 계산해주는 함수 예시
addto = function (a) {
    isum=0
	for (i in 1:a) {
		isum=isum + i
	}
	print (isum)
}

addto ( 100 )
# [1] 5050
addto ( 50 )
# [1] 1275

 

그 외 유용한 기능들

substr

# 문자열에서 일부 추출
substr("dataanylysis",2,8)
# [1] "ataanyl"

 

cov

공분산이란?[각주:1]

# 공분산 계산 기능
height <- c(150, 160, 170, 180, 190)
weight <- c(50, 60, 70, 80, 90)
covariance <- cov(height, weight)
cat("키와 몸무게 간의 공분산:", covariance, "\n")
# 키와 몸무게 간의 공분산: 250

# cat : "concatenate"의 약어로, R에서는 하나 이상의 인자를 연결하여 출력하는 함수이다.
# cat 함수는 화면에 문자열이나 값을 출력할 때 주로 사용된다.

 

cor

상관계수란?[각주:2]

x <- c(1, 2, 3, 4, 5)
y <- c(2, 3, 5, 4, 6)
correlation <- cor(x, y)
cat("두 변수의 상관계수:", correlation, "\n")
# 두 변수의 상관계수: 0.9

 

날짜

Sys.Date()	# 현재 연월일을 출력
# [1] "2026-05-29"
Sys.time()	# 현재 연월일시를 출력
# [1] "2026-05-29 00:17:03 KST"
as.Date ("2026-05-29")	# 데이터를 날짜 형식으로 변환
# [1] "2026-05-29"

# 포맷 변환
# %Y는 연도 네 자리, %y는 연도 두 자리, %m은 월, %d는 일, %A는 요일
> format(Sys.Date(),'%Y/%m/%d')
# [1] "2026/05/29"

 

형변환

as.data.frame()	# 데이터 프레임 형식으로 변환
as.list()	# 리스트 형식으로 변환
as.matrix()	# 행렬 형식으로 변환
as.vector() # 벡터 형식으로 변환
as.factor()	# 팩터 형식으로 변환
as.numeric()	# 배열이나 다른 데이터 타입을 숫자로 변환
as.character()	# 숫자, 날짜, 논리값 등 다양한 데이터 타입을 문자열로 변환

 

산점도 그래프

height = c(170,168,174,175,188,165,165,190,173,168,159,170,184,155)
weight = c(68,65,74,77,92,63,67,95,72,69,60,69,73,56)
plot(height, weight)	# 가로, 세로 순

 

 

인사이트

C나 파이썬과 비슷하지만 다른 점이 있어서 조금 더 익숙해져야 알 것 같은 느낌이다.

ADsP 시험 통과를 위해서는 조금만 공부해도 괜찮을 것 같은 느낌.

Colab에서 학습했었던 ai관련 파이썬 느낌이 든다.

 

  1. 두 변수 간의 관계를 나타내는 통계적 개념으로 두 변수가 함께 어떻게 변하는지를 측정 [본문으로]
  2. 두 변수 간의 통계적 관계를 나타내는 지표 [본문으로]