R 프로그래밍 대표 문법 살펴보기
Contents
1.2 R 사용시 필요한 대표적인 기초 문법
1.2.1 함수
함수는 특정 동작을 수행하는 블럭입니다. 다른 객체로 값을 전달하거나 계산을 하거나 등의 기능을 처리한 후 그 값을 반환합니다. 함수는 인자와 처리, 결과 3가지로 구성됩니다. 함수의 인자는 함수가 특정 동작을 수행하기 위해 정의에 따라서 반드시 필요한 경우도 있지만, 부분적으로 필요한 옵션들을 설정하는 경우도 있습니다. 처리는 함수가 수행하는 특정 동작에 대한 정의를 나타내는 부분입니다. 결과는 동작을 수행하여 도출된 것을 산출하는 부분입니다.
|
|
다음으로는 함수의 사용법을 설명하겠습니다. R에서 함수를 만드는 방법은 function()
코드를 사용해, ()안에 인자를 정의하고 {} 안에 함수의 기능(처리)과 산출되는 결과(return)를 정의하여 만들고 이름을 할당해 사용할 수 있습니다. 인자는 보통 2~3개 정도로 설정하지만 여러 개도 설정할 수 있습니다. 이렇게 글로 표현하는 것보다 직접 함수를 만들어 사용해보는 것이 함수의 사용법에 대한 이해를 도울 수 있습니다. 예를 들면 두 개의 변수를 받아 두 변수를 서로 더하는 기능의 함수를 만들어 봅시다.
plus란 이름으로 정의한 이 함수는 임의의 변수 x,y를 인자로 받으며 해당 변수들을 더하는 결과를 산출합니다. 이 함수는 인자로 받은 데이터 타입에 대한 제약이 있는 경우입니다. 함수의 +연산자는 숫자형 데이터 타입에서만 작동하기 때문에 문자형 데이터 타입이 인자로 들어가게되면 에러가 발생합니다. 따라서 함수를 정의할 때는 이용편의를 위해 인자의 데이터 타입과 그 역할 등을 # 이나 ''' ‘‘‘로 설명을 추가하여 적어두는 것이 좋습니다.
1.2.2 반복문
함수에 대해 알아보았으니 이번에는 반복문에 대해 알아봅시다. 반복문은 이름 그대로 계산이나 특정 처리를 반복적으로 하여 적용하기 위해 사용하는 방법입니다.
|
|
자 이제 예를 들어봅시다. 우리가 1부터 10까지의 제곱값을 구해야 하는 문제를 받았다고 해봅시다. 우리는 그 값을 구하기 위해 1부터 10까지의 숫자에 모두에 ^2을 쳐서 계산하는 방법을 선택할 수 있습니다. 그러나 이 방법은 만약 숫자가 늘어 1부터 100까지 제곱 값을 구해야하는 경우에는 시간이 너무 오래걸리게 됩니다. 그러므로 각 숫자에 대해 자동으로 제곱 연산을 반복하면 그 값을 구하는 시간과 오류가 크게 줄어들 것입니다.
이제 위의 예를 R에서 반복문으로 구현해보겠습니다. 반복문은 for()
함수를 통해 만들 수 있습니다. 1부터 10까지의 제곱값을 구한다고 할 때 우리는 괄호 안에 1:10을 for(i in 1:10)
다음과 같은 방식으로 표현할 수 있습니다. 여기서 i는 1:10 벡터의 원소 하나를 의미합니다. 또한, i가 아닌 다른 임의의 문자로도 지칭할 수 있습니다. 이제 제곱 계산을 반복적으로 처리를 위해 {}에는 숫자에 대해 제곱값을 계산하는 코드 {i^2}
를 작성합니다.
참고로 rbind() 함수와 square_vec이라는 빈 벡터에 대해서는 설명하지 않았는데, 이 코드들은 반복문의 일부이지만 반복문에서 필수적인 부분이 아니기 때문입니다. 먼저 square_vec은 반복문의 처리 결과를 저장할 임의의 빈 벡터를 나타냅니다. rbind()란 함수는 두 데이터를 묶어서 하나로 만들어주는 기능을 가진 함수로 square_vec에 결과 값이 반복될 때마다 대치되지 않고 누적되도록 하는 역할을 합니다.
1.2.3 조건문
|
|
조건문은 데이터를 조건에 따라 분류하거나, 조건에 맞는 데이터를 추출하는 경우에 사용합니다. 일반적으로 조건문은 if(), else
블럭 2 가지로 구성됩니다. 즉 조건과 그 조건이 아닌 나머지로 구성됩니다. 물론 조건이 하나가 아닌 경우에는 else if()
를 사용하여 추가합니다.
if는 첫 번째 조건이자 거름망입니다. 여기서 조건은 ()안에 표현되는데 이 조건에 해당하는 데이터들은 분류되어 ()바로 뒤의 {}안의 처리가 이루어지게 됩니다. else if 는 하나의 조건 그 이상을 표현하기 위해 사용합니다. else if 역시 if와 마찬가지로 ()안에 조건을 쓰고 {}안에서 해당 조건의 데이터를 처리합니다. else는 조건 외 나머지 모든 경우를 나타냅니다. 따라서 하나의 조건만 사용한다면 일반적으로 else if()
블럭은 사용할 필요가 없습니다.
이제 조건문의 개념을 더 명확하게 하기 위해 5를 기준으로 작은 수와 그보다 큰 수를 분류하는 기능을 지닌 조건문을 만들어 봅시다. 조건문의 경우 함수와 별개로 사용할 수 있습니다만, 이 예시에서는 편리성을 위해 함수로 만들어 보겠습니다.
5보다 크거나 작거나를 구분하기 위해서 필요한 조건은 2가지 입니다. 첫째 5보다 큰 경우, 둘째 5보다 작은 경우 이 2가지를 조건으로 표현하면 나머지는 자연스럽게 5가 됩니다. 먼저 5보다 큰 경우에 대한 조건은 x > 5 표현할 수 있습니다. 이 것을 첫 번째 조건으로 if() 안에 들어갑니다. 조건을 서술했으니 해당 조건일 경우 처리를 {}안에 코딩합니다. 여기서는 “5보다 크다"라는 문자열을 결과 보이도록 처리했습니다.
그 다음 5보다 작은 경우에 대한 조건이 필요합니다. 5보다 작다는 것은 x < 5로 표현할 수 있습니다. 이 조건을 else if()부분에 넣으면 두 번째 조건이 생기게 됩니다. 두 번째 조건에 해당하는 처리 역시 마찬가지로 “5보다 작다"라는 문자열로 처리합니다. 그러면 이제 5인 경우만 남게 됩니다.
따라서 else 블록에서 5임을 확인하는 문구를 아웃풋으로 한다면 5보다 크거나 작거나를 구분하는 함수가 완성됩니다. 이제 이 함수를 다음과 같이 iffivetest(2)
,iffivetest(5)
,iffivetest(7)
각 조건에 해당하는 경우에 대해 실행해 보면 조건별 처리가 잘 작동되는지 확인할 수 있습니다.
위와 같이 조건물을 함수로 만들 수도 있지만, R에서는 조건물을 좀 더 같단하게 만드는 방법이 있습니다. 기본 함수로 ifelse()라는 함수를 사용하면 좀 더 편리하게 조건문을 구현할 수 있습니다. 이 함수는 한번에 조건에 해당할 때의 처리방법과 나머지 경우에 해당할 때 처리 방법을 따라서 위에서 만든 5보다 크거나 작거나 5인 경우를 구분하는 조건문을 ifelse 함수를 통해 구현하면 위와 같이 한 줄로 표현할 수 있습니다.
이것으로 R 초심자를 위한 R 사용방법과 배경지식에 대한 글을 마치겠습니다. 다음에는 딥러닝에서 계산의 핵심이 되는 벡터와 행렬의 연산에 대해 알아보겠습니다.
Author Sunsick
LastMod 2020-01-17