어느 소스를 보다보니 <<- 이런 연산자가 눈에 띄었습니다. 보통 변수에 값을 할당하는 것은 "<-"인데 말이죠. 그냥 추측으로 특정 변수에 대한 메모리 복사가 아닐까하고 추정하였는데. 결과적으로는 그건 아니더라구요.
(대체 메모리 복사는 뭐죠??? ㅡ.ㅡ;;)
그래서 생각난 김에 <<- 연산자에 대해 정리해볼까 합니다.
해당 연산자는 보통 함수 내에서 사용하는 연산자입니다.
함수 내에서 <- 연산자를 이용해서 변수에 값을 할당하면 일반적으로는 함수 내에서만 사용되는 변수로 지정되어 값을 할당하게 됩니다. (일반적으로 지역변수(local variable)라고 하는 형태로 생각하시면 됩니다.) 반면에 <<- 연산자로 값을 할당하면 해당 변수는 전역변수(global variable)처럼 변수가 생성되어서 함수 밖에서도 사용할 수 있는 변수가 됩니다. R에서 사용하는 환경으로 말하면 Global Environment에 해당변수가 생성된다고 보시면 됩니다.
다음의 두 함수를 지정하고, 각각 결과를 보면 쉽게 이해할 수 있을 겁니다.
첫 번째 함수를 실행시키면 gVar.b의 결과인 100이 함수 값으로 return되지만, gVar.b를 더 이상 사용할 수 있는 변수가 되지는 않습니다. 반면, 두 번째 함수를 실행시키면 gVar.c의 결과인 1,000이 return되고 gVar.c 변수가 전역변수처럼 계속 사용할 수 있게 됩니다.
(대체 메모리 복사는 뭐죠??? ㅡ.ㅡ;;)
그래서 생각난 김에 <<- 연산자에 대해 정리해볼까 합니다.
해당 연산자는 보통 함수 내에서 사용하는 연산자입니다.
함수 내에서 <- 연산자를 이용해서 변수에 값을 할당하면 일반적으로는 함수 내에서만 사용되는 변수로 지정되어 값을 할당하게 됩니다. (일반적으로 지역변수(local variable)라고 하는 형태로 생각하시면 됩니다.) 반면에 <<- 연산자로 값을 할당하면 해당 변수는 전역변수(global variable)처럼 변수가 생성되어서 함수 밖에서도 사용할 수 있는 변수가 됩니다. R에서 사용하는 환경으로 말하면 Global Environment에 해당변수가 생성된다고 보시면 됩니다.
다음의 두 함수를 지정하고, 각각 결과를 보면 쉽게 이해할 수 있을 겁니다.
a <- 10 foo <- function() { gVar.b <- a * 10 return (gVar.b) }
a <- 10 foo.2 <- function() { gVar.c <<- a * 100 return(gVar.c) }
첫 번째 함수를 실행시키면 gVar.b의 결과인 100이 함수 값으로 return되지만, gVar.b를 더 이상 사용할 수 있는 변수가 되지는 않습니다. 반면, 두 번째 함수를 실행시키면 gVar.c의 결과인 1,000이 return되고 gVar.c 변수가 전역변수처럼 계속 사용할 수 있게 됩니다.
반응형
'Playing with Data > R | Python' 카테고리의 다른 글
dplyr를 사용할 때, 인자값을 자유롭게 사용할 수 있는 팁 (1) | 2018.10.21 |
---|---|
데이터 타입 비교 - Vectors,Matrices, Arrays, Lists and Data Frames (0) | 2018.01.24 |
for문을 대체할 수 있는 apply 함수 (0) | 2018.01.23 |
데이터 반죽을 위한 R 라이브러리 - dplyr, tidyr (0) | 2018.01.22 |
데이터 분석의 시작은 데이터 반죽하기 (0) | 2018.01.22 |