R Studio - Function, Data type
오늘은 R을 다룰 때 기본적으로 알아야 할 내용에 대해 다뤄보겠습니다. 크게 다음과 같습니다.
- 사용자 지정 함수는 어떻게 생성하는가
- R의 Data type 종류
1. Function
R에서 mean(), sum(), apply() 같은 내장함수가 아닌 다른 함수를 만들어서 사용하고 싶을 때가 있습니다.
이를 사용자 지정 함수라고 하는데 어떻게 설정할 수 있는지 알아봅시다.
먼저 인자로 어떤 수를 받고 그 수에 5를 더한 값을 return하는 함수를 만들고 싶다고 해봅시다.
코드를 먼저 살펴보겠습니다.
add_five <- function(x){
result <- x + 5
return(result)
}
위와 같이 먼저 지정할 함수 이름을 써주고 해당 변수에 만들고 싶은 함수를 넣어줍니다.
function()의 괄호 안에는 우리가 입력할 인자를 넣으면 됩니다.
함수가 동작할 내용을 { } 안에 넣으면 되고 함수 안에서 계산되거나 도출하고 싶은 값이 있다면 return(result) 와 같이 return() 안에 넣어주면 됩니다.
이번엔 인자를 두 개 받아볼까요?
입력한 두 수를 더해주는 함수를 만들어봅시다.
sum2 <- function(x1, x2){
result <- x1 + x2
return(result)
}
function() 의 인자 개수에는 제한이 없습니다. 원한다면 3개를 넣어줘도 됩니다.
이렇게 R에서 사용자 정의 함수를 간단한 방법으로 만들 수 있습니다.
2. Data type
이제 R에서의 Data type에 대해 알아보겠습니다.
Data type을 잘 알아야 나중에 복잡한 코드, 심화된 내용을 다룰 때 헷갈리지 않을 수 있기 때문에 잘 익혀두는 것이 중요합니다.
해당 변수의 Data type을 알기 위해서는 class() 함수를 이용할 수 있습니다.
numeric
"numeric" type은 숫자형을 의미합니다. 간단하게 예시를 보겠습니다.
2, 3.14 모두 정수와 실수 같은 숫자형 데이터이기 때문에 numeric type으로 출력됩니다.
character
"character" type은 문자형을 의미합니다. 간단하게 예시를 보겠습니다.
dslabs 라이브러리의 포함된 murders 데이터 셋을 불러왔습니다.
어떤 package에 포함된 data 또는 function을 정확하게 지정하고 싶을 때는 dslabs::murders 와 같이 package::data(function) 형식으로 적어주면 됩니다.
많은 package를 불러온 상태일 때 헷갈리지 않도록 할 때 유용할 것 같습니다.
각설하고, murders 데이터 셋을 살펴보면 population, total 은 numeric type으로 보입니다.
state, abb, region은 문자형 데이터로 판단되는데 R에서는 어떤 type으로 인식하는 지 봅시다.
우리의 예상과 같이 문자형 데이터는 "character" type인 것을 알 수 있습니다.
logical
logical type은 논리연산을 한 결과의 data type인데, 예시를 보면 빠르게 이해할 수 있습니다.
R에서 3==2 를 입력하게 되면 FALSE 라는 결과가 출력됩니다.
당연하게 3은 2와 다르기 때문인데, 이 결과를 z라는 변수에 넣고 Data type을 보면 "logical" type임을 확인할 수 있습니다.
logical type에서 TRUE는 1을 의미하고 FALSE는 0을 의미합니다. 예시를 보겠습니다.
x라는 변수에 벡터 [1, 2, 3]를 넣어주고 3과 비교했을 때,
FALSE, FALSE, TRUE 의 결과가 출력됩니다.
이때, 이 결과값을 sum() 함수에 넣으면 1이 출력됩니다. TRUE가 1을 의미하고 FALSE가 0을 의미하기 때문입니다.
마찬가지로 평균을 취하면 0.33333 즉, 1/3이 출력됩니다.
factors
마지막으로 factor type을 살펴보겠습니다.
factor는 범주형 데이터의 범주를 나타내주는 요소라고 볼 수 있습니다.
murders 데이터 셋의 region을 보면 South, West 등으로 지역의 범주를 나타내는 것으로 판단됩니다.
실제로 region의 Data type을 보면 "factor" type으로 설정된 것을 확인할 수 있습니다.
region을 출력하면 위와 같이 가장 아래쪽에 Levels가 출력되는 것을 볼 수 있는데, Levels는 범주형 데이터에서 나올 수 있는 값을 의미합니다.
levels() 함수를 이용하면 범주형 데이터의 Levles만 볼 수도 있습니다.
만약에 범주형 데이터를 이용해서 그래프를 그리게 되면 Levels의 순서대로 그래프가 표현됩니다.
위 그래프는 region 데이터를 이용해서 간단하게 plot을 그려본 것입니다.
Levels의 순서와 같도록 그래프가 출력된 것을 확인할 수 있습니다.
Levels의 순서를 바꾸고 싶다면 reorder() 함수를 이용하면 됩니다.
region <- reorder(region, value, FUN=mean)
위 코드는 region 별로 value의 mean에 근거해서 region의 Levels를 reorder 한다고 이해하면 됩니다.
실제로 region의 levels의 순서가 바뀐 것을 확인할 수 있습니다.