1. 변수와 함수
변수 (variable) : 특정 범위 안에서 다양하게 변하는 값. 숫자, 문자 등.
함수 (function) : 특정한 기능을 수행하기 위해 사전에 설계된 프로그래밍 구문을 묶어 놓은 것.
1) 변수 만들기
변수 만들때의 규칙 |
1. 첫 문자에는 반드시 영문자 또는 마침표를 사용한다. 2. 첫 문자에는 숫자, 언더바 (_) 를 사용할 수 없다. 3. 마침표(.)와 언더바(_)를 제외한 특수문자는 사용할 수 없다. 4. 대문자와 소문자를 구분한다. 5. 변수명 중간에 빈칸을 넣을 수 없다. |
* R은 대문자와 소문자를 구분하는 언어이기 때문에 항상 구분해서 사용한다.
R에서 변수를 생성할 때는 <-를 사용한다.
변수명 <- 값
* <-는 할당연산자(assignment operator)이다. 연산자에 대해서는 3-3에서 배움
* 변수에 값을 할당할 때 숫자인지 문자인지에 따라 작성방법이 다르다. (숫자, "문자" 또는 '문자')
* 할당연산자 <-의 단축키로 ALT + - 를 사용할 수 있다.
2) 함수 호출하기
함수명(인자)
ex. max()함수 (최댓값을 구해주는 함수)
max(age)
ex2. sum()함수 (더하기 함수)
sum(10, 20)
함수의 결과를 변수에 저장하기
x <- sum(10, 20)
3) 내장 함수 사용하기
내장 함수 : 별도의 패키지 설치 없이 사용할 수 있는 함수
print("Hello")
a <- sum(1:200)
# 1부터 200까지 더하기
Sys.Data()
# 오늘 날짜 출력
4) 사용자 정의 함수 만들기
- 사용자가 원하는 기능을 만들기 위해 작성하며, 함수가 생성된 후에는 내장함수처럼 호출한다.
- 여러 작업이 반복될 때 함수를 생성하면 자동화할 수 있어 유용하다.
함수명 <- function(매개변수1, 매개변수2, ...) {
함수가 구현할 내용..
..
return(결괏값)
}
- 함수명 : 함수의 이름. R 환경에 저장되며, 함수를 호출할 때 사용한다.
- 매개변수 (=파라미터 parameter) : 함수의 변수. 함수가 호출될 때 전달되는 어떤 값이다. 매개변수는 없을 수도 있고, 여러개가 있을 수도 있다.
- 함수가 구현할 내용 : 사용자가 함수의 기능을 프로그램 언어로 정의한 구문이다.
- 결괏값 : 함수의 기능이 수행된 결과로 함수 본문의 마지막 표현식이다.
Q. return()함수를 사용하는 이유 _ cat() 함수와 비교
return()으로 만든 함수는 변수를 따로 출력하기 전에는 값이 출력되지 않는다.
하지만 cat()으로 만든 함수는 변수에 저장해도 함수를 호출한 것처럼 바로 값이 출력된다. 이는 cat()함수가 단순히 결괏값을 출력할 뿐, 값을 함수 인자에 반환해주지 않기 때문이다.
따라서 함수가 구현한 값을 인자에 반환하여 변수에 저장하기 위해서는 return()함수가 필요하다.
( * NULL은 변수가 초기화되지 않았을 때, 즉 값이 존재하지 않음을 표시한다.)
* print() / cat() 비교
cat()함수는 여러 숫자, 문자를 그냥 고대로 뱉어낸다(출력한다).
print() 함수는 입력된 첫번째 숫자 또는 문자(열) 만 출력한다.
cat()함수는 여러 변수를 출력할 수 있지만 print() 함수는 변수 하나만 출력할 수 있다.
2. 패키지
여러 함수들을 기능에 따라 묶어서 제공하는 패키지 package.
ex) 문자열 처리 관련 패키지인 stringr 패키지 - 문자열 결합하는 str_c(), 문자열 치환 삭제하는 str_replace(), 문자열에서 일부 문자만 추출하는 str_sub() 등.
1) 패키지 설치
(1) 함수를 이용해 설치하는 방법
script 탭에 install.packages() 함수를 작성 및 실행
install.packages("패키지명")
(2) R 스튜디오의 인터페이스를 이용하는 방법
packages탭 - install - packages 입력란에 패키지명 입력 - install
2) 설치한 패키지 불러오기
* R 스튜디오에 설치되어 있는 전체 패키지 목록 확인하는 법 : 패키지 명 없이 다음 코드 입력
library()
각 패키지 설치 경로와 현재 설치되어 있는 패키지 목록 확인 가능
3) 패키지 로드하기 : library() 함수
- 패키지 로드 과정은 R 스튜디오를 시작할 때마다 다시 실행해야하는 일회성 작업이다.
library(패키지명)
* 패키지명에 큰 따옴표를 사용하지 않는다
* console 탭에 아무 내용 없이 > 표시 (프롬프트 기호 표시) : 패키지를 사용할 준비가 되었다
* 설치한 R 버전보다 불러온 패키지 버전이 높다는 경고 메시지 : R 버전을 업데이트 하면 됨
4) 패키지 삭제하기 : remove.packages() 함수
remove.packages("패키지명")
- packages 탭에서도 로드, 삭제 가능 (패키지명 앞 체크상자 체크, 패키지명 우측 x 버튼)
5) 주요 패키지
- 핸들링 - 데이터 조작 : dplyr
- 시각화 - 그래프 : ggplot2
- 시각화 - 구글 차트 : googleVis
- 리포트 - 웹 대시보드 - shiny
- 공간 - 지리지도 - maps, 구글 맵 - ggmap
- CRAN 사이트의 패키지 목록 페이지에서 필요한 패키지를 찾아볼 수 있다.
3. 조건문과 반복문
제어 흐름 control flow : 프로그래밍에서 함수가 호출되는 순서
- 코드는 보통 위에서 아래로 실행된다. 이때 이 흐름을 변경하기 위해 사용하는게 조건문과 반복문.
- 조건문 : 조건과 일치할 때 코드를 수행
- 반복문 : 주어진 조건에 맞게 코드를 반복 수행
- 조건문과 반복문을 만들기 위해 : 연산자 operator 필요
- 연산자 : 프로그래밍에서 데이터를 처리하는 연산 기호 ex. + - * /
1) 연산자
- 할당 연산자 assignment operator
- 산술 연산자 arithmetic operator
- 관계 연산자 relational operator
- 논리 연산자 logical operator
(1) 할당 연산자
(= 대입 연산자)
: 특정 값을 변수에 저장하며, 우항에 있는 값이 좌항에 할당된다.
* R에서는 <-가 = 보다 우선순위가 높다. = 사용시 오류가 빈번히 발생하기에 <- 를 주로 사용.
ex. x <- y = 10 인 경우 변수 x는 생성되지 않음.
(2) 산술 연산자
: 숫자를 계산하는 연산자
산술 연산자 | 기능 |
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
%/% | 몫 |
%% | 나머지 |
** 또는 ^ | 제곱수 |
(3) 관계 연산자
(= 비교 연산자)
: 변수 간의 혹은 변수의 값을 비교하여 관계를 결과값으로서 TRUE, 또는 FALSE의 진릿값으로 알려주는 연산을 수행.
관계 연산자 | 기능 |
> | 크다 |
>= | 크거나 같다 |
< | 작다 |
<= | 작거나 같다 |
== | 같다 |
!= | 같지 않다 |
! | 아니다 |
(4) 논리 연산자
: 관계 연산자로 얻은 진릿값(truth value)을 다시 연산할 때 사용
논리 연산자 | 기능 |
& | 그리고 (and) |
\ | 또는 (or) |
& : 양쪽의 조건이 모두 충족될 때에만 TRUE를 반환
\ : 한쪽의 조건만 충족되는 경우에도 TRUE를 반환
2) if-else 조건문
조건문 : 조건이 TRUE 이면 실행되는 코드 구문. if-else 문이 대표적.
if(조건) {
조건이 TRUE일 때 실행되는 구문1
} else {
조건이 FALSE일 때 실행되는 구문2
}
* 조건문에 2개 이상의 조건을 넣어야할 경우, if-else 문 중간에 else if 문을 추가할 수 있다.
if-else 문에 여러 조건을 넣어 작성이 가능하며, 코드를 실행하면 첫번째 조건부터 순차적으로 조건을 비교한다.
if(조건1) {
조건이 TRUE일 때 실행되는 구문1
} else if (조건2) {
조건1은 FALSE이고, 조건2는 TRUE일 때 실행되는 구문2
} else if (조건3) {
조건1과 조건2 모두 FALSE일 때 실행되는 구문3
}
3) 반복문
: 정해진 조건만큼 반복 실행하는 구문 ( 대 : for(), apply() )
(1) for() 함수
for (변수 in 반복 횟수) {
반복 조건만큼 실행되는 구문
}
ex) 구구단 2단 (변수 i를 1부터 9까지 반복하여 2와 곱한 값을 변수 a에 할당하기)
첫번째 트라이는 a가 NULL로 뜸
이유: 각각 i*2한 a값을 프린트해야하는데 프린트를 자동화하지 않음 (?)
두번째 트라이 방식이 맞는거
i는 1부터 9범위까지이고, i*2가 a2이고 그 a2를 출력하는것
세번째 트라이인 a3은 제대로 연산되지 않음
i * 2 로서의 a3가 출력되어야하는데 print(i)를 하니까 곱하기 2가 안된 i ( 1:9 )만 출력됨
- 반복문도 조건문처럼 다중으로 사용할 수 있다.
ex) 구구단 2단부터 9단까지 출력하기
hint : 숫자 두개를 곱해야하므로 ( 2 * 1 ) 변수도 2개가 필요하다.
첫번째 트라이가 잘못된 이유: 모르겟음
paste()함수 : 나열된 값을 이어서 출력하는 함수
paste()함수를 사용한다.
(2) apply()함수
- for() 함수는 프로그래밍에서 흔히 사용하는 함수지만, 동시에 여러 열이나 행을 처리할 수는 없기 때문에 데이터 처리에는 적합하지 않다. 벡터, 행렬, 리스트를 많이 다루는 R에서는 행과 열 단위를 연산할 수 있는 apply() 함수를 주로 사용한다.
- apply() 함수에는 lapply() 함수와 sapply() 함수가 있다. 데이터 형태에 따라 구별해서 사용한다.
- apply() 함수 : 행렬 연산에 사용. x에는 행렬을 넣고 margin 옵션이 1이면 행, 2이면 열에 함수가 적용된다.
apply(x, margin, 함수)
- lapply() 함수 : 연산 결과를 리스트로 반환하는 함수. 벡터, 행렬, 리스트, 데이터프레임 등 모두에 사용할 수 있다.
lapply(x, 함수)
- sapply() 함수 : 연산 결과를 벡터로 반환하는 함수. lapply() 함수처럼 모든 자료형에서 사용할 수 있다.
sapply(x, 함수)
예제)
apply() 함수로 행렬 값 계산하기. 전체 합, 최솟값, 최댓값 구하기.
행렬 생성 함수 : matrix()
matrix(벡터, nrow = 행 개수, ncol = 열 개수)
출처: https://rlawkdus.tistory.com/15 [하나하나차곡차곡:티스토리]
margin 옵션이 1을 선택하면 행에 함수가 적용된다.
margin 옵션을 2를 선택하면 열에 함수가 적용된다.
예제2)
데이터 세트 iris를 사용해서 apply () 함수 사용하기
iris 데이터 세트는 R에서 기본으로 사용할 수 있는 내장 데이터 세트로, 150개의 행과 5개의 열 (꽃잎의 길이와 넓이, 꽃받침의 길이와 넓이, 종류)로 이루어져있다.
- 먼저 str() 함수와 View() 함수로 데이터 세트 내용을 살펴본다.
* View() 함수 : 데이터프레임 내용을 뷰어로 확인할 수 있는 함수. 뒤에 다시 나옴.
- iris 데이터 세트의 4개 열의 합, 평균, 최솟값, 최댓값, 중간값 구하기
hint : apply () 함수 사용
[ 대괄호 ] 는 인덱스를 의미한다.
iris [3, 67] 은 iris 데이터 프레임의 3행, 67열의 값을 의미한다.
여기에서는 모든 행의 1부터 4열을 사용할 것이므로 행 항목을 생략하고 iris[, 1:4] 로 표기한다.
- lapply() 함수 사용
- sapply() 함수 사용
- lapply() 와 sapply() 의 차이점 : 결괏값 출력 형식의 차이
lapply()는 연산 결과를 리스트로 반환하므로 변수를 세로로 나열하여 출력한다.
sapply()는 연산 결과를 벡터로 반환하므로 변수를 가로로 나열하여 출력한다.
이처럼 apply() 함수는 함수에 따라 데이터 형태를 다르게 반환하므로 분석에 필요한 데이터 형태에 따라 함수를 다르게 사용할 수 있다.
R 코드 오류 해결하기 |
- R에서 코드 오류를 해결하는 방법은 다른 프로그래밍 언어와 별반 다르지 않다.
- 컴퓨터 용어로 오류는 bug, 오류를 처리하는 과정은 debugging 이라고 한다.
- 일반적으로 R에서 이야기하는 디버깅은 값이 정상적으로 들어가고 있는 중간중간에 값을 출력해보거나 browser() 함수를 이용해 디버깅 모드를 이용하는 것을 말한다.
- 입문자가 주로 하는 실수와 코드 작성 시 주의할 점
#1
변수나 객체를 기반으로 함수를 실행할 때 객체가 있는지 확인한다.
apply(x, 2, sum)
여기서 x라는 객체를 찾을 수 없다는 오류가 발생할 때 (Error in apply(x, 2, sum) : object 'x' not found)
x 객체가 생성되어 있어야 하는게 당연한거임...
#2
괄호나 따옴표가 쌍을 이루는지 확인한다.
예기치 않은 오류 ( Error : unexpected ')' 입니다 in "apply(iris[,1:4], 2, sum))" )
괄호나 따옴표가 쌍을 이루고 있는지 확인해주기
#3
특정 패키지의 함수를 사용할 때 패키지를 로드했는지 확인한다.
패키지 로드를 안했거나 ( -> library(함수이름) ), 함수 이름에 오타가 났을 때
Error in ~~ : could not find function "함수이름"
* dplyr패키지에 포함된 데이터 요약 정보를 확인할 수 있는 함수인 summarize(), summarise() 동의어로 둘다 사용함
#4
결과에서 Warning 또는 Error가 났을 경우에 잘 읽어보기
대부분의 오류는 메시지에서 어떤 오류가 있는지 알려주므로 잘 읽어보기. 해결이 안될 경우에는 구글이나 R 커뮤니티 등에서 검색해보면 대부분 해결할 수 있음.
함수 | 기능 |
for() | 조건만큼 구문을 반복 실행한다. |
apply() | 행 또는 열 단위에 함수를 적용하여 연산한다. (배열, 행렬에 사용) |
lapply() | 행 또는 열 단위에 함수를 적용하여 연산 결과를 리스트로 반환한다. (모든 자료형에 사용) |
sapply() | 행 또는 열 단위에 함수를 적용하여 연산 결과를 벡터로 반환한다. (모든 자료형에 사용) |
'기타 > R' 카테고리의 다른 글
R 독학하기 - 4 (2) (1) | 2024.02.14 |
---|---|
R (R studio) 업데이트하는 방법 / 패키지 업데이트하는 방법 (1) | 2024.02.13 |
R 독학하기 - 4 (1) (0) | 2024.02.13 |
R 독학하기 - 2 (1) | 2024.02.08 |
R 독학하기 - 1 (1) | 2024.02.05 |