할당
같지만 같지 않은
R에는 변수에 어떤 값을 할당(assignment)하기 위해 =
, <-
, <<-
을 사용할 수 있다. 특히 =
와 <-
는 큰 차이가 없어 보인다. 몇 가지만 빼면.
- 우선순위 :
<-
가=
보다 높다. - 함수의 매개변수 설정 :
=
만 사용할 수 있다.
여기서는 특히 2번째를 얘기해보자.
함수의 매개변수 설정
다음의 함수 f()
에는 두 개의 매개 변수가 있다.
f = function(x,y) {
x-y
}
이때 =
과 <-
가 같다고 생각해서 f(x <- 3, y <- 1)
과 같은 방식을 사용하면 엉뚱한 결과가 나온다.
함수의 매개 변수에 할당할 때에는 =
만을 사용할 수 있다.
f(x <- 3, y <- 1)
## [1] 2
어찌됐든 위의 함수는 원하는 대로 x-y
를 결과값으로 내놓고 있지 않은가? 하지만 실상은 다르다. 다음을 실행시켜보자.
f(y <- 1, x <- 3)
## [1] -2
f(y= , x= )
꼴의 경우에는 매개변수 y
와 x
에 원하는 값을 할당한다. 하지만 f(y <- , x <- )
의 경우에는 매개변수이름으로 할당되는 것이 아니라 함수 정의에서 나타난 매개변수 순서대로 값이 할당된다. 다시 말해 다음의 둘은 결과가 같다.
f(y <- 1, x <- 3)
## [1] -2
f(x=(y <- 1 ), y=(x <- 3))
## [1] -2
f(y <- 1, x <- 1)
에서 y <- 1
은 변수 y
에 1
을 대입한다. 그리고 y <- 1
의 결과는 1
이다. ( print(y <- 1)
을 해보자.) 그리고 이 1
이 함수의 인자로 입력된다. 하지만 어떤 매개변수로 들어갈지에 대해 정해주지 않았기 때문에 함수의 정의(f=function(x,y)
)에서 나오는 첫 번째 매개변수 x
에 1
이 대입된다. 마찬가지 이유로 x <- 1
의 결과값 3
은 매개 변수 y
에 대입된다.
참고로, <-
를 쓸 때에는 반드시 <
과 -
를 붙여야 한다. 예를 들어 x < -1
과 x <- 1
은 전혀 다른 결과를 나타낸다.
<<-
마지막으로 <<-
는 함수 안에서 전역 변수에 값을 대입할 수 있다. 다음을 비교해보자.
x=5
f = function(a,b) {
x <- a; y <- b
x-y
}
f(3,2)
## [1] 1
x
## [1] 5
x=5
f = function(a,b) {
x <<- a; y <<- b
x-y
}
f(3,2)
## [1] 1
x
## [1] 3
여기서는 R에서 할당 연산자로 쓰이는 =
, <-
, <<-
의 의미를 알아보고 차이점을 살펴보았습니다. 특히 함수에서 매개변수를 지정할 때에는 꼭 =
를 써야 함을 주의하세요!
Leave a comment