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 연습문제
-
다음의 코드는 왜 작동하지 않는가?
my_variable <- 10 my_varıable #> Error in eval(expr, envir, enclos): object 'my_varıable' not found
주의 깊게 살펴보라! (연습문제가 의미가 없는 것처럼 보이지만, 아주 작은 차이도 알아채도록 두뇌를 훈련하면 프로그래밍할 때 큰 도움이 된다.)
-
다음 각 R 명령어를 올바르게 실행되도록 조정하라.
libary(tidyverse) ggplot(dota = mpg) + geom_point(maping = aes(x = displ, y = hwy))
Alt + Shift + K 를 눌러라. 어떻게 되는가? 메뉴를 사용하여 어떻게 같은 곳으 로 갈 수 있는가?