728x90

R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.

그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.

강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.


참고:

[개발환경 셋팅하기]R설치 및 환경변수 등록-(1)

[개발환경 셋팅하기]RStudio설치-(2)

[개발환경 셋팅하기]RStudio프로젝트 만들기-(3)


저번 강의에서 함수에 대해서 다루었다.

그럼 새로운 상황에 대해서 이야기 해도록 해보자. 아래와 같은 상황이다.


language<-"R"


printLang<-function(){

  language<-"C++"

  print(language)

}


printLang()


이 상황의 경우 결과는 어떻게 될까?

일단 오른쪽 상황을 보자.



변수 language는 C++이라고 예상했지만 이상하게도 R이라고 되어있다.

그러면 출력값은 어떠할까?



출력값은 C++로 되어있다. 이상하다.

변수의 값은 R임에도 불구하고 출력값은 C++인 것이다.

사실 이상할건 없다. 함수내의 변수는 함수에서만 사용하고 사라진다.

그러나 외부에선언한 변수는 프로그램이 종료될때까지 끝까지 남게된다.

이렇게 외부에 선언한 변수를 전역변수라고 한다.

같은 language라는 이름을 달고 있어도 전역변수와 지역변수는 다른 녀석이다.

<-의 뜻은 변수를 할당해줘라는 의미라고 하였다. 함수내에서 <-의 행위는 변수가 있으면 그 변수의 값을 대입하고

없으면 할당해서 만들어준다. <-를 특정 블럭에서 사용한다면 그 블럭내에서 새로운 변수를 할당하게된다.

그리고 전역변수와 만약 이름이 같아면 지역변수가 전역변수의 이름을 가려버린다.

이걸 프로그래밍 용어로 지역변수가 전역변수를 가린다고 한다.

따라서 호출할 방법이 없다.

만약에 전역변수를 사용할 예정이였다면 아래와 같이 사용하여야한다.


language<-"R"


printLang<-function(){

  globalLang <- language

  language<-"C++"

  print(globalLang)

}


printLang()


지역변수가 전역변수를 가리기전에 미리 새로운 변수에 담아야 한다는 것이다.

그럼 의문점이 남는다. 특정 함수에서 전역변수의 값을 바꿀수 없는가 하는 문제점이다.

결론부터 말하면 가능하다. 아래와 같은 방법으로 말이다.


language<-"R"


printLang<-function(){

  language<<-"C++"

  print(language)

}


printLang()


여기서 단 한줄이 변경되었는데 <-가 <<-로 바뀌었다.

도대체무슨일이 일어났을까? 오른쪽 화면을 보자.



보면 전역변수의 값이 바뀐걸 확인할 수 있다. <<-의 의미는 전역변수의값을 바꾸라는 뜻인 것이다.



'Programming > R' 카테고리의 다른 글

[R-13]현재작업 디렉터리, 파일 저장, 읽기(txt)  (0) 2017.11.19
[R-12]사용자로부터 입력받기  (0) 2017.11.18
[R-10]함수(function)  (0) 2017.11.18
[R-09]반복문  (0) 2017.11.18
[R-08]분기문(조건문)  (0) 2017.11.18

+ Recent posts