4 워크플로: 기초

앞서 R 코드를 실행해보았다. 세부사항을 충분히 다루지 않았지만, 여러분들은 분명히 기초적인 것들을 알게 되었을 것이다. 그렇지 않았다면 좌절해서 이 책을 던져 버렸을 것이다! R 로 프로그래밍을 시작할 때 잘 안되어 힘든 것은 자연스러운 일인데, R 은 구두점에 엄격하고, 문자 하나라도 제자리를 벗어나면 바로 말을 듣지 않는다. 힘이 조금 들겠지만 이는 일상적이고 잠깐이기 때문에 걱정하지 않아도 된다. 모든 사람에게 일어나는 일이며 계속 노력하면 극복할 수 있다.

진도를 나아가기 전에 R 코딩 기초가 탄탄한지, RStudio 의 편리한 기능들을 알고 있는지 확인해보자.

4.1 코딩 기초

플롯을 빨리 만드느라 빼먹었던 몇 가지 기본사항을 살펴보자. R 을 계산기로 사용할 수 있다.

1 / 200 * 30
#> [1] 0.15
(59 + 73 + 2) / 3
#> [1] 44.7
sin(pi / 2)
#> [1] 1

<- 를 사용하여 새로운 객체를 생성할 수 있다:

x <- 3 * 4

c() 를 이용하여 다중 요소를 하나의 벡터로 조합(combine)할 수 있다:

primes <- c(1, 2, 3, 5, 7, 11, 13)

기초 산수는 벡터의 모든 요소에 적용된다:

primes * 2
#> [1]  2  4  6 10 14 22 26
primes - 1
#> [1]  0  1  2  4  6 10 12

객체를 생성하는 모든 R 명령어, 즉 할당(assignment)문은 다음의 동일한 형식을 갖는다.

object_name <- value

이 코드를 읽을 때, 객체 이름이 값을 갖는다 라고 마음 속으로 읽어보자.

앞으로 많은 할당문을 만들게 되어 <- 를 타이핑하는 게 고통스러울 것이다. 귀찮다고 = 를 사용하지 말라. 작동은 하겠지만 나중에 혼란스럽게 될 것이다. 대신 RStudio 단축키인, Alt + - (빼기 기호)를 사용하라. RStudio 는 자동으로 <- 주위를 공백으로 둘러싼다. 이는 좋은 코드 포매팅 습관이다. 이렇게 좋은 날에 코드를 읽는다는 것은 고생스러운일이므로두눈을위해서라도 공백을 사용하라.

4.2 이름짓기

객체 이름은 문자로 시작해야만 하고 문자, 숫자, _, . 만 포함해야 한다. 객체 이름이 설명력이 있으면 좋으므로 여러 단어를 이어쓸 때의 규칙(convention)이 필요하다. 소문자 단어들을 _ 으로 구분하는 snake_case 를 추천한다.

i_use_snake_case
otherPeopleUseCamelCase
some.people.use.periods
And_aFew.People_RENOUNCEconvention

27 장의 함수 부분에서 코드스타일에 대해 다시 살펴볼 것이다. 코드스타일의 베스트 프랙티스에 대해 더 배우고 싶다면 tidyverse 스타일 가이드를 추천한다: https://style.tidyverse.org.

객체를 확인하려면 이름을 타이핑하면 된다.

x
#> [1] 12

다음방법으로도 할당을 해보자.

this_is_a_really_long_name <- 2.5

이 객체를 확인하기 위해 RStudio의 완성 기능을 사용해보라. “this” 를 타이핑하고 탭을 누르고 접두어가 고유하게 될 때까지 문자들을 추가한 후 엔터키를 눌러라.

이런, 실수를 저질렀다! this_is_a_really_long_name 의 값은 2.5 가 아닌 3.5 이어야 했다. 정정하게 도와주는 다른 단축어를 사용하라. “this” 를 타이핑한 후 Cmd/Ctrl + ↑ 를 눌러라. 이렇게 하면 타이핑했던 명령어 중 그 문자로 시작하는 것들을 보여준다. 화살표 키를 사용하여 움직인 후 엔터를 눌러 해당 명령 어를 다시 타이핑하라. 2.5 를 3.5 로 변경하고 다시 실행하라.

또 다른 할당문을 만들어보자.

r_rocks <- 2 ^ 3

이를 확인해보자:

r_rock
R_rocks

여러분과 R 사이에 암묵적인 계약이 있다. 즉, R 은 지루한 계산을 해주겠지만, 대신 여러분은 완전하고 정확하게 지시를 해야 한다. 오자는 중요하다. 대소문자를 구별한다.

4.3 함수 호출하기

R 에는 다음과 같이 호출되는 내장 함수가 많이 있다.

function_name(arg1 = val1, arg2 = val2, ...)

숫자 시퀀스(sequence)를 만드는 seq() 를 이용해보고, 동시에 RStudio의 유용한 기능에 대해 더 배워보자. se 를 타이핑하고 탭을 쳐보자. 가능한 완성문을 보여주는 팝업이 나타난다. 헷갈리지 않게 하기 위해 추가로 (즉, q 를) 타이핑하거나 ↑/↓ 화살표 키로 선택하여 seq() 를 지정하라. 팝업되는 툴팁은 해당 함수의 인수와 목적을 알려준다. 도움이 더 필요하면 F1 키를 눌러서 하단 오른쪽 창의 헬프 탭에 있는 세부내용을 모두 참고하라.

원하는 함수를 선택했을 때 탭을 한 번 더 눌러라. RStudio 는 여는 괄호(()와 닫는 괄호()) 한 쌍을 추가한다. 인수 1, 10 을 타이핑하고 리턴키를 쳐보자.

seq(1, 10)
#>  [1]  1  2  3  4  5  6  7  8  9 10

다음의 코드를 타이핑하고, 짝을 이루는 따옴표로 비슷한 도움을 받아보자.

x <- "hello world"

따옴표와 괄호는 항상 짝을 이루어야 한다. RStudio는 최선을 다해 도움을 주지만, 엉망이 되어 짝이 맞지 않는 결과를 낳을 가능성도 있다. 이렇게 되면 R은 연속 문자 “+” 를 표시한다.

x <- "hello +

+ 는 R이 입력을 더 기다리고 있음을 표시한다. 즉, 여러분이 완료하지 않았다고 생각한다. 보통 여러분이 " 혹은 ) 를 잊은 경우이다. 누락된 쌍을 추가하거나, ESC 키를 누르고 나가서 다시 해보자.

이제 상단 오른쪽 창의 Environment(환경)를 보자.

여기에서 우리가 생성한 객체를 모두 볼 수 있다.

4.4 연습문제

  1. 다음의 코드는 왜 작동하지 않는가?

    my_variable <- 10
    my_varıable
    #> Error in eval(expr, envir, enclos): object 'my_varıable' not found

    주의 깊게 살펴보라! (연습문제가 의미가 없는 것처럼 보이지만, 아주 작은 차이도 알아채도록 두뇌를 훈련하면 프로그래밍할 때 큰 도움이 된다.)

  2. 다음 각 R 명령어를 올바르게 실행되도록 조정하라.

    libary(tidyverse)
    ggplot(dota = mpg) +
      geom_point(maping = aes(x = displ, y = hwy))
  3. Alt + Shift + K 를 눌러라. 어떻게 되는가? 메뉴를 사용하여 어떻게 같은 곳으 로 갈 수 있는가?