ADsP R기초

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

변수와 연산자

변수(variable)

저희는 다음과 같은 데이터를 가지고 있습니다. 이 데이터를 R에 입력하려면 어떻게 해야할까요?

변수를 선언하고 싶으면 다음과 같이 씁니다.

변수이름 <- 데이터, 객체 등등

변수는 데이터나 객체를 담은 상자라고 생각하면 편합니다. 우리가 방금 쓴 명령어들은 '변수이름'이 적힌 상자에 어떤 '데이터'를 집어 넣으라고(<-) 명령하고 있는 것이죠.

> date <- as.Date("2019-11-07") #일자. 날짜 객체
> sleepEfficiency <- 0.8 #수면 효율. 소수 double
> daySleep <- 11 #낮 졸음. 정수 integer
> fatigue = 6
> highIntensityExcercise <- TRUE #고강도 운동 논리 

이 코드를 그냥 복사 붙여넣기 하면 오류가 뜰 겁니다. > 를 지워줘야 합니다.

상자 안에 뭐가 있는지 보려면 변수이름을 치면 됩니다.

> daySleep
[1] 11
<- 대신 =을 쓸 수 있는 경우도 있다. -> 대입을 거꾸로 할 수도 있다.

다른 프로그래밍 언어에서는 주로 <- 대신 =을 쓰는데요. R에서도 =을 쓸 수는 있습니다. 예를 들어

> daytimeSleepness <- 11 #정수형 integer
> daytimeSleepness = 11 #이것도 정수형
11 -> DaySleep #저것도 정수형

이 셋은 거의 같은 뜻입니다. 시험에도 이따금 = 을 쓸 수 있는지 묻는 문제가 출제 됩니다. 하지만 R에서는 주로 <-을 사용한다는 걸 알아두세요.

 

그런데 #라고 적힌 주석 옆에 뭔가 적어놓았습니다. 날짜니 소수, 정수, 논리라는 건 무슨 뜻일까요?

자료형(data type)

변수에도 종류가 있습니다. 서로 다른 종류끼리는 맞지 않기 때문에, 연산을 하거나 하면 R이 알아서 변환을 해줍니다. 예를 들어 다음 세 가지 변수는 같지 않습니다.

> integerThree <- 3 #정수형 integer
> typeof(integerThree)
> doubleThree <- 3.0 #소수형 double
> typeof(doubleThree)
> StringThree <- "3" #문자열 String
> typeof(StringThree)

똑같은 3처럼 보이지만 정수와 소수는 숫자입니다. 하지만 문자열은 글자입니다. 그래서 덧셈도 못합니다.

> integerThree + integerThree #3 + 3은?
[1] 6
> doubleThree + integerThree # 소수3과 정수3은 더할 수 있습니다. 직관적이죠.
[1] 6
> StringThree + integerThree # 글자3 과 정수 3을 더하니 에러가 뜨고 계산이 안 됩니다...
Error in StringThree + integerThree :
  non-numeric argument to binary operator
형변환

둘을 더해주려면 문자3을 숫자 3으로 바꿔야 합니다. 형변환이라 하는데, 자료형을 바꾼다는 뜻입니다. 예를 들어 문자 3을 숫자3으로 바꾸려면  as.numeric()함수에 문자3을 넣어주면 됩니다.

as.numeric(StringThree) + integerThree
[1] 6

함수가 뭔지는 다음 시간에 자세히 배워보겠습니다. 일단은 두 가지 데이터 타입이 더 있다는 걸 알고 가죠.

논리형 logical 옳고 그름, 어떤 조건이 만족되었느냐 아니냐를 나타냅니다. 컴퓨터는 흑백논리라서 TRUE와 FALSE 두 가지만 있습니다.

날짜 Date

문자, 논리, 날짜에 대해서는 나중에 알아보겠습니다. 일단 소수와 정수에 집중해서 계산을 좀 해보겠습니다.

연산자 우선순위

컴퓨터는 원래 계산을 하기 위해 만들어졌습니다. 물론 우리도 R을 이용해서 이런 저런 데이터 분석을 하려면 계산을 좀 할 줄 알아야 합니다. 계산할 때 쓰는 더하기 빼기 같은 것들을 연산자라 합니다. 앞서 + 더하기 연산자를 봤었었죠.

연산자에는 우선 순위가 있습니다. 왜 학교에서 더하기보다 곱하기를 먼저 한다고 배웠었죠? 컴퓨터도 똑같은데 몇 가지 규칙이 더 있습니다. 우선순위가 낮은 것부터 봅시다.

더하기 빼기 < 곱하기 나누기
> 2 + 3 / 5 #계산의 답이 무엇일까요? 직접 해보세요.

정답은 1이 아니라 2.6 입니다. 나누기를 먼저하기 때문이죠.

< 몫과 나머지 < 제곱

제곱 연산자는 ^이고 곱하기는 물론 몫이나 나머지보다 우선합니다.

R에는 나누기가 전부가 아닙니다. 몫이나 나머지를 구하는 연산자도 있습니다. 예를 들어 10을 3으로 나눈 몫은 3이고 나머지는 1이죠. 몫과 나머지 연산자는 곱하기보다 우선합니다.

> 10 %% 3 # 나머지 연산자
[1] 1
> 10 %/% 3 #몫 연산자
[1] 3
> 10 ^ 2 #제곱 연산자
[1] 100

> 10 * 10^2 %/% 3
# 1000 나누기 3의 몫이니까 333이 될까요? 배배꼬인 순서를 따져보면... 답은?
[1] 330

컴퓨터는 규칙을 엄격하게 지킵니다. 계산 순서를 바꾸고 싶으면 학교에서 배운 것처럼 괄호를 쳐주면 됩니다.

> (10 * 10)^2 / 3 #몫을 구하는 대신 나눗셈을 시켰습니다.
[1] 3333.333

R은 계산했더니 소수가 나오면 알아서 double로 형변환을 해줍니다. 프로그래밍 하시는 분들은 이게 왜 중요한지 아시겠지만, R은 유연한 친구입니다.

[기출문제] 연산자를 함수처럼 쓰는 특이한 방법...

아래 R코드를 수행한 결과로 적절한 것은?

> "+"(2,3)

1) 에러가 뜬다

2) 5

3) 6

 

답은 직접 실행해서 알아보세요. 사실 뻔하거든요.

댓글

댓글 본문
작성자
비밀번호
버전 관리
Taehee Kim
현재 버전
선택 버전
graphittie 자세히 보기