참고한 서적 : https://hongong.hanbit.co.kr/r-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D/ (혼자 공부하는 R언어)
📌이번 주차내용
→ R언어에서의 변수 및 함수 알아보기
→ R언어에서 패키지는 어떻게 관리하는가?
→ R언어에서 조건문 및 반복문(apply()) 사용
변수
: 특정 범위 안에서 다양하게 변하는 값
함수
: 특정 기능을 수행하기 위해 짜여진 프로그래밍 구문
R에서 변수명 지을 때 지켜야 할 규칙
- 첫 문자는 반드시 영문자 혹은 마침표(.)를 사용한다.
- 첫 문자는 숫자, 밑줄 문자(_)를 사용할 수 없다.
- 마침표(.)와 밑줄 문자(_)를 제외한 특수 문자는 사용할 수 없다.
- 대문자와 소문자를 구분한다.
- 변수명 중간에 빈칸을 넣을 수 없다. 빈칸은 밑줄 문자(_)를 활용하여 표현한다.
# R언어에서 변수 생성 방법
변수명 <- 값 # ex) x <- 10(x라는 변수에 10이라는 값 할당함)
# R언어에서 함수를 호출하는 방법(함수를 불러서 사용함!)
함수명(인자) # ex) max(x) (사전에 사용하려는 함수가 정의되어 있어야 한다)
내장 함수
: 별도의 패키지를 설치하지 않고 사용할 수 있는 함수
# R언어에서의 일부 함수는 내장 함수여서, 따로 import하지 않고 사용할 수 있다.
# 예를 들어, print(), sum() 함수 등이 존재한다.
print("Hello R!")
a <- sum(1:100) # 1부터 100까지 합함
a # 5050 출력됨!
사용자 정의 함수
: 내장 함수 외에 사용자가 원하는 기능을 갖춘 함수를 따로 정의한 것
함수명
: 함수의 이름, R 환경에 저장되며 함수를 호출할 때 사용한다.
매개변수
: 함수에 전달되는 변수의 이름. 매개변수의 개수는 함수마다 다르게 설정 가능!
결과값
: 함수가 실행되고 최종적으로 얻은 결과, 함수 내용의 마지막 표현식이다.
# R언어에서 사용자 정의 함수를 만드는 방법! 크게 아래와 같은 구조를 띈다.
함수명 <- function(매개변수1, 매개변수2, ...) {
함수의 내용(로직, 어떻게 동작할 것인지!)
return(결과값)
}
# R언어에서 커스텀 함수를 만든 예시(4개 매개변수의 값을 곱해서 반환하는 함수)
multifly_four_number <- function(a, b, c, d) {
res <- a * b * c * d
return(res)
}
multifly_four_number(1, 2, 3, 4) # 24 출력
번외 - return 함수는 어떻게 활용할 수 있을까?
# 함수에는 return 이라는 표현식이 존재한다.
# 이 return을 이용하면 함수를 호출한 곳에 값을 남겨주어 저장하여 활용할 수 있다!
a <- sum(1:100) # 이렇게 하면 a라는 변수에 sum(1:100)호출의 결과인 5050이 저장된다
a + b # 이런식으로 함수를 호출한 결과를 가져다가 활용할 수 있는 것!
패키지(package)
: 다양한 함수를 기능에 따라 묶어서 제공하는 형태
R언어 외에도 다양한 프로그래밍 언어에는 많은 패키지가 존재하며, 원하는 기능을 가져다 사용함!
패키지를 설치하는 방법(2가지)
함수를 이용하여 설치하는 방법
Script
탭에서 install.packages()
를 이용하여 원하는 패키지를 설치할 수 있다.
함수를 이용하여 패키지를 설치하는 방법은 다음과 같다.
install.packages("패키지 이름")
예시
R 스튜디오 인터페이스를 이용하는 방법
R 스튜디오 인터페이스로 패키지를 설치할 수 있다.
패키지를 Packages
탭에서 직접 선택해서 설치한다!
다음과 같은 코드를 작성하여 실행하면 설치한 패키지들을 확인할 수 있다.
library() # 설치된 패키지 확인!
# 설치했던 reshape2 패키지를 불러온다.
# library(사용하고 싶은 패키지의 이름, 단 설치되어있어야 사용가능함)
library(reshape2)
# 설치했던 reshape2 패키지를 삭제한다.
# 여기서는 패키지명을 큰 따옴표로 감싸주어야 함!!
remove.packages("reshape2")
조건문 & 반복문 & 연산자 & 제어 흐름 단어에 대해서 알아보자
조건문
: 특정 조건과 일치할 때 코드를 수행하는 문장
반복문
: 주어진 조건에 맞게 코드를 반복 수행하는 문장
연산자
: 프로그램에서 데이터를 처리하는 연산 기호
제어 흐름
: 함수가 호출되는 순서
연산자는 특정 변수나 값들에 대한 연산을 수행할 수 있도록 해 준다.
종류는 크게 다음과 같은 4가지 종류가 존재한다!
할당 연산자(Assignment Operator)
산술 연산자(Arithmetic Operator)
관계 연산자(Relational Operator)
논리 연산자(Logical Operator)
할당 연산자
할당 연산자 | 기능 |
---|---|
← | 특정 변수에 값을 저장한다 |
# R언어에서의 할당 연산자 활용
A <- 2 # A라는 변수에 2라는 값을 저장
B = 10 # =도 변수에 값을 저장할 수 있으나, <- 보다 우선순위가 낮다는 특징이 있음!
C = D <- 10 # <-가 =보다 우선순위가 높기 때문에 D에 10 할당, 이후 C에도 10할당!
C # 10 출력
D # 10 출력
변수에 값을 할당할 때 ←
그리고 =
2개를 사용할 수 있는데, 이 둘에는 차이점이 존재한다!
=
보다 ←
가 우선순위가 높다.
E <- F = 10 # <-가 =보다 우선순위가 높기 때문에 E에 F할당, 근데 이 시점에 F는 값이 없음!
# 따라서 여기에서는 에러가 발생한다.
=
는 함수 인자에 값을 넣을 때 사용할 수 없지만, ←
는 사용할 수 있다.
sum(y <- 1) # <-는 함수 인자에 값을 넣을 때 사용할 수 있다!
y
sum(z = 1) # =는 함수 인자에 값을 넣을 때 사용할 수 없다..
z
산술 연산자
산술 연산자 | 기능 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
%/% | 몫 |
%% | 나머지 |
** 또는 ^ | 제곱수 |
관계 연산자(Boolean 형태의 값으로 값을 전달함)
관계 연산자 | 기능 |
---|---|
> | 크다 |
≥ | 크거나 같다 |
< | 작다 |
≤ | 작거나 같다 |
== | 같다 |
≠ | 같지 않다 |
! | 아니다 |
5 != 5 # 같지 않으면 TRUE, 같으면 FALSE
!10 # 10이 아니다
!FALSE # FALSE가 아니다
논리 연산자
논리 연산자 | 기능 |
---|---|
& | 그리고(and) |
x <- 10
y <- 5
(x > 5) & (y > 5) # &(and) 둘 다 참이면 TRUE, 그 외에 FALSE
(x > 5) | (y > 5) # |(or) 둘 중 하나라도 참이면 TRUE< 그 외에 FALSE
# R언어에서의 if - else 구조(대부분의 프로그래밍 언어가 이와 동일함)
if(조건) {
조건이 TRUE일 때 실행할 구문
} else {
조건이 FALSE일 때 실행할 구문
}
# R언어에서의 else if(2개 이상의 조건을 걸어서 조건문을 형성할 때 사용)
if(조건 1) {
조건 1이 TRUE일 때 실행할 구문
} else if (조건 2) {
조건 1이 FALSE + 조건 2가 TRUE일 때 실행할 구문
} else {
조건 1과 2 모두 FALSE일 때 실행할 구문
}
반복문은 대표적으로 for(), while()
함수가 존재한다.
그런데 R언어에서는 데이터의 빠른 연산을 처리해주는 apply()
함수도 존재한다!
for() 반복문
# R언어에서의 for 반복문 구조
for(변수 in 반복 횟수) {
반복 조건만큼 실행하는 구문
}
apply() 반복문
R언어에서는 벡터, 행렬, 리스트를 많이 다루기 때문에 행과 열 단위를 연산하는 apply()
를 주로 씀!
apply()
함수에는 여러 종류가 있으며, 각 함수의 구조와 기능에 대해서 간략히 알아보도록 하자.
# apply() 함수로 행렬 값 계산하기
x <- matrix(1:9, 3, 3) # 3x3 행렬 정의
x
apply(x, 1, sum) # 각 행을 더한 결과 출력
apply(x, 2, sum) # 각 열을 더한 결과 출력
apply(x, 2, min) # 각 열에서의 최솟값 출력
apply(x, 1, max) # 각 행에서의 최대값 출력
113p 확인 문제 6번
3개의 변수를 합하는 함수를 다음과 같이 구성해보았습니다!
143p 확인 문제 2번
빈칸에는 차례대로 else if, else
가 들어갑니다.
age <- 20
if (age < 13) {
print("어린이입니다.")
} else if (age < 19) {
print("청소년입니다.")
} else {
print("성인입니다.")
}