R강의 #1 - 데이터 기본구조편
- 프로그램언어/R
- 2018. 8. 28.
그냥 인트로
이 강의는 R언어를 처음 접해보거나, 아직 R에 대해서 익숙치 않는 사람들을 위한 강의입니다. 프로그래밍에 숙달하지 않는 분들을 타겟으로 포스팅을 할 예정이라, 긴 설명이 들어갈 수 있으니 프로그래밍이 어느정도 숙달 되신 분들은 주저리 주저리 단 긴말들은 읽지 마시고, 빠르게 넘어가주세요 :)
강의 주제로 R을 잡은 이유는, 데이터 분석을 하는 사람이 R을 할 줄 모르면 솔직히 이건 아니지라는 생각도 들었고, 주변 비개발자 분들중에서 파이선이나 자바는 어렵더라도 R은 어느정도 이해하는 모습을 보고, 그래도 R이 타 언어보다 편하구나라는 것을 느껴서 데이터 분석의 강의를 R로 정했습니다. 현재, 텐서플로우, 블록체인도 포스팅하고 있으나, R도 매주 최소 하나씩은 작성해서 병행해보도록 하겠습니다.
참고로, 아예 R이 설치도 안된 분들이 계시면 예전에 포스팅을 따라서 설치 해보세요.
데이터 구조란, 프로그램을 할 때 가장 기초중에 기초로서 데이터의 뼈대가 어떤 것인지를 알려준다고 볼 수 있다. 데이터 구조를 이해하지 못하면, 데이터의 흐름을 알 수 없고 최적화된 프로그래밍을 할 수가 없다.
예를 들어, 내가 인터넷 서핑만 하는 사람이라고 할 때 이런 사람에게 초고사양의 하이엔드급 노트북을 추천하면 어떨까? 돈은 돈대로 들고, 무겁기는 엄청 무거울 것이다. 이런 경우를 방지하기 위해서 데이터 구조를 이해해야 하며 프로그래밍의 가장 기본이라고 할 수 있을 것이다.
기본 데이터 타입
R은 프로그래밍이 제공하는 기본 데이터 타입(Basic Data Types) 역시 제공하고 있다. 사실 이게 없으면 프로그램을 제대로 짤 수가 없을 것이다. R은 특이하게도 변수에 데이터 타입을 선언을 하지 않는다. 다른 프로그램 같은 경우는 데이터 타입을 미리 선언하고 데이터를 넣는 구조였다면, R은 들어오는 값을 기반으로 변수가 선언되는 형태이다.
참고로, 프로그램은 우측값이 먼저 실행이 되어서 왼쪽값에 대입이 된다. (거의 대다수의 프로그램이 이런 방식을 채택함)
기존 방식
숫자형 i = 10
R 방식
i = 10
위 사례같이 기존 프로그램 언어들은 변수 i에 미리 숫자형이라는 것을 선언하고, 10이라는 값을 넣었다면 R은 10이라는 데이터를 기반으로 i의 값을 숫자형으로 선언한다. 사실 이렇게 될 수 있는 이유는 R언어의 데이터 타입이 많지 않기 때문이다.
숫자(Numeric)
위에서 설명한 것처럼 변수에 숫자를 대입하면 숫자형으로 인식하게 된다.
> x = 10.5
> y = 11
> z = 24
> class(x)
[1] "numeric"
> class(y)
[1] "numeric"
> class(z)
[1] "numeric"
R언어를 실행해서 위와 같이 입력 한 후, class(변수명)을 실행하면, numeric 이라고 친절히 알려준다. class(변수명)을 적으면, 입력한 변수의 데이터 타입을 알 수 있는데 그냥 이런 기능을 제공하는 함수가 있다는 정도로만 이해를 하자
그런데 R에서 숫자형 말고, 정수형이라는 것도 제공을 한다. 정수가 숫자 아닌가요? 라고 생각할 수 있는데 숫자가 정수형보다 좀 더 큰 범위라고 생각을 하면 될 것이다. 위의 예제에서 x = 10.5라는 값을 입력 받았는데 소수점이 있는 데이터 타입은 정수형이 아니다. 즉, Numeric = Integer + 소수형의 값이고, Integer는 정수일 뿐이다.
정수형(Integer)
정수형의 선언은 생각보다 약간 복잡하다. 사실 정수형 자체를 굳이 써야 될 필요성은 아직 못느끼고 있다. 언젠가 느낄지 모르겠지만, 숫자형이 정수형을 포함하기 때문에 그냥 숫자형을 써도 무방할 것이다
> a = as.integer(1)
> a
[1] 1
> class(a)
[1] "integer"
> is.integer(a)
[1] TRUE
> b = as.integer(2.5)
> b
[1] 2
정수형을 사용할 때는, as.integer(정수)를 입력한다. 참고로 소수점 값도 넣을 순 있지만, 소수점을 절삭한 정수값만 인식을 하게 된다
복소수형(Complex)
R에는 특이하게도 복소수형을 제공하게 된다
> a = 1 + 2i
> a
[1] 1+2i
> class(a)
[1] "complex"
논리형(Logical)
대다수의 프로그램에서 기본적으로 제공하는 논리형 역시 R에서는 제공하고 있다. 논리형이란, 이 값이 참이냐 거짓이냐라는 것을 의미한다. 논리에 대한 내용은 추후 포스팅 할 예정이니 이번에는 그냥 이런 형이 있다는 정도로만 이해하도록 하자
> a = 2
> b = 3
> c = a > b
> class(c)
[1] "logical"
> c
[1] FALSE
> c = b > a
> c
[1] TRUE
a에는 2값, b에는 3값을 넣은 후, c에 "a는 b보다 크다"라는 값을 넣으니 c는 곧장 FALSE 값을 리턴하였다. a가 b보다 작으니 논리적으로 틀렸다를 리턴한 것이고, c에 다시 "b가 a보다 크다"라고 하니 TRUE 즉 옳다라고 리턴하는 것을 볼 수 있을 것이다.
문자형(Character)
문자형은 말 그대로 문자를 뜻한다. 문자는 모든 것을 담을 수 있는데 예를 들어, 숫자값도 계산에 쓰이지 않는다면 문자로 인식시킬 수도 있을 것이다.
> a = 3
> b = 4
> a+b
[1] 7
> b = as.character(4)
> b
[1] "4"
> a+b
Error in a + b : non-numeric argument to binary operator
> c = "동해물과 백두산이 마르고 닳도록"
> c
[1] "동해물과 백두산이 마르고 닳도록"
처음 a와 b변수에 숫자 각각 3과 4를 대입하여 a와 b를 더했을 때, 7이라는 값을 정상적으로 출력되게 하였으나, b에 숫자가 아니라 문자형 4를 대입시키고, a와 b를 더하니 에러메시지가 발생한 것을 확인할 수 있다.
여기까지가 R에서 제공하는 기본적인 데이터 구조입니다. 다음 포스팅은 벡터, 행렬, 리스트, 데이터 프레임같이 좀 더 확장된 데이터 타입에 대해서 소개를 해보도록 하겠습니다.
모든 포스팅은 R Studio 기반으로 작성
참고로, R 포스팅은 모두 R Studio 기반으로 할 예정이니 혹시나 추후 캡쳐 화면이 있다면 R 스튜디오 화면임을 알아두셨으면 좋겠습니다.
'프로그램언어 > R' 카테고리의 다른 글
R 할줄 R지? #4 - 벡터 심화편 (0) | 2018.12.27 |
---|---|
R 할줄 R지? #3 - 벡터(Vector) 이해하기 (0) | 2018.12.24 |
R강의 #2 - 변수 이해하기편 (0) | 2018.08.29 |
R의 도움말 확인법 (0) | 2017.08.16 |
R 설치하기, Step by Step (0) | 2016.08.22 |