Sheldon
November 29, 2015
이번에는 R에서의 논리 연산자를 소개하고 함수를 정의하는 방법에 대해서 다루겠습니다. 논리 연산자는 프로그래밍 flow에서 감초 역할을 하죠. R에서 쓰이는 논리 연산자는는 다음과 같습니다. !: not &: and |: or x < y: x가 y보다 작다 <=: 작거나 같다 >: 크다 >=: 크거나 같다 ==: 같다 !=: 같지는 않다 논리 연산의 결과는 TRUE 아니면 FALSE 로 출력됩니다. 이 둘이 무엇을 의미하는 지는 다 아시겠죠.
x<-3
y<-4
z<-3
x<y #x가 y보다 작니? 라고 물어보고 있습니다.
## [1] TRUE
x>y #여기서는 x가 y보다 크니? 라고 물어보고 있죠.
## [1] FALSE
x==z #x와 z가 같니? 의 의미입니다.
## [1] TRUE
x!=z
## [1] FALSE
and와 or을 한 번 써서 두 개의 논리 연산을 연결해 봅시다.
y!=z |x!=z
## [1] TRUE
y!=z &x!=z
## [1] FALSE
x==2 | y<z
## [1] FALSE
고등학교 때 기억을 더듬으면 and는 두 조건을 모두 만족시켜야 참이 되고 or은 둘 중 하나만 만족해도 참이 됩니다. 둘 다 거짓이면 or로 연결해도 거짓이 되고요.
이번에는 벡터를 만들어서 여러 개의 수치에 대해서 논리연산을 해 봅시다. 여러 개의 수치에 대해서 all()과 any()를 쓸 수 있습니다. all()은 해당하는 값들이 모두 조건을 만족해야지 참이 되고 any()는 해당하는 값들 중 어느 하나만 조건을 만족해도 참이 됩니다.
x<-c(1,2,3,4)
x>4
## [1] FALSE FALSE FALSE FALSE
x<2
## [1] TRUE FALSE FALSE FALSE
all(x>2) #벡터 x에 있는 모든 값들이 2보다 커야 참이 됩니다.
## [1] FALSE
any(x>2) #벡터 x에 있는 값들 중 어느 하나만 2보다 커도 참이 됩니다.
## [1] TRUE
sum(x>0)은 벡터 x에 있는 원소들을대상으로 x>0을 만족하는 지 평가하고 TRUE이면 1, FALSE이면 0을 부여합니다. 그리고 이것들을 모두 더합니다. 이 명령은 한편으론 벡터 x에 있는 원소들 중 x>0을 만족하는 원소의 개수를 구하는 역할을 합니다
x<-c(1,2,3,4)
sum(x>2)
## [1] 2
mean(x>2)은 벡터 x에 있는 원소들을대상으로 x>2를 만족하는 지 평가하고 TRUE이면 1, FALSE이면 0을 부여합니다. 그리고 그것들의 평균을 구합니다. 벡터 x에 있는 원소들 중 x>2를 만족하는 원소들의 비율을 구하는 역할을 한다고 볼 수 있습니다.
mean(x>2)
## [1] 0.5
이렇게 논리 연산의 결과를 숫자처럼 생각해서 산술하는 접근이 생각보다 유용하게 쓰일 수 있습니다. 차차 R을 써 보면 그런 경우를 알게 될 것입니다.
이번에는 R에서 함수를 만드는 법을 소개하겠습니다. R자체에도 유용한 함수가 많지만 자기 자신에게 맞는 특정 작업을 위해서 거기에 맞는 특정 명령, 함수가 필요한 경우가 있습니다.
새 함수를 정의하는 절차는 다음과 같습니다. 1. 함수의 이름을 정합니다. 2. 입력할 변수의 종류나 개수를 지정합니다. 인수가 없는 함수를 정의할 때는 비워두면 됩니다. 3. 계산 처리를 한 줄씩 씁니다. 4. return()으로 계산 결과를 출력합니다.
R에서 이를 입력하는 기본적인 형식은 다음과 같이 됩니다. 함수명 <- function(인수 또는 입력값){ 계산 처리 계산 처리 return(계산 결과) }
우선 인수가 없는 함수를 예시로 만들어보겠습니다. 실행하면 10을 출력하는 함수 give10을 정의해 볼게요.
give10 <- function() { #인수가 없는 함수로 괄호 안에 아무것도 안 넣었습니다.
return(10) #이렇게 하면 10을 출력하죠.
}
give10()
## [1] 10
이번에는 숫자를 넣으면 2가 더해져서 나오는 plustwo라는 함수를 정의해 볼게요.
plustwo <- function(x){ #여기서는 입력변수가 필요합니다. 이 함수에 입력되는 변수를 x라고 할게요.
return(x+2) #이렇게 x에 2를 더해진 값을 출력하라고 명령할 수 있습니다.
}
plustwo(5)
## [1] 7
plustwo(3.4)
## [1] 5.4
입력변수는 굳이 하나가 아니고 여러개가 될 수 있습니다. 예를 들어서 이번에는 a와 b를 입력하면 sqrt(a2+b2)을 출력하는 함수를 만들어 볼게요. 이것은 직각삼각형에서 밑변과 높이를 입력하면 피타고라스의 정리를 이용해서 빗변의 길이를 출력하는 뭐 그런 용도로 쓸 수 있겠죠. 그런 의미에서 함수의 이름을 pita라고 할게요.
pita <-function(x, y){
return(sqrt(x^2+y^2))
}
pita(3,4)
## [1] 5
pita(8,6)
## [1] 10