도움 청하기

Overview

Teaching: 10 min
Exercises: 10 min
Questions
  • R에 대해서 도움을 어떻게 받을 수 있을까요?

Objectives
  • 함수와 특수 연산자에 대한 R 도움말 파일을 불러 읽어온다.

  • CRAN 작업화면(task view)을 사용해서 문제를 해결하는 팩키지를 식별해 낸다.

  • 동료로부터 도움을 구한다.

도움말 파일 불러 읽어오기

R과 모든 팩키지는 함수에 대한 도움말 파일을 제공한다. 네임스페이스(인터랙티브 R 세션)에 적재된 팩키지에 있는 특정 함수에 대한 도움말은 다음과 같이 찾는다:

?function_name
help(function_name)

RStudio에 도움말 페이지에 도움말이 표시된다. (혹은 R 자체로 일반 텍스트로 표시된다)

각 도움말 페이지는 절(section)로 구분된다:

함수마다 상이한 절을 갖추고 있다. 하지만, 상기 항목이 알고 있어야 하는 핵심 내용이다.

Tip: 도움말 파일 불러 읽어오기

R에 대해 가장 기죽게 되는 한 측면이 엄청난 함수 갯수다. 모든 함수에 대한 올바른 사용법을 기억하지 못하면, 엄두가 나지 않을 것이다. 운좋게도, 도움말 파일로 인해 기억할 필요가 없다!

{.callout}

특수 연산자

특수 연산자에 대한 도움말을 찾으려면, 인용부호를 사용한다:

?"<-"

팩키지에 대한 도움말 얻기

많은 팩키지에 “소품문(vignettes)”이 따라온다: 활용법과 풍부한 예제를 담은 문서. 어떤 인자도 없이, vignette() 명령어를 입력하면 설치된 모든 팩키지에 대한 모든 소품문 목록이 출력된다; vignette(package="package-name") 명령어는 package-name 팩키지명에 대한 이용가능한 모든 소품문 목록을 출력하고, vignette("vignette-name") 명령어는 특정된 소품문을 연다.

팩키지에 어떤 소품문도 포함되지 않는다면, 일반적으로 help("package-name") 명령어를 타이핑해서 도움말을 얻는다.

함수가 정확하게 기억나지 않을 때

함수가 어느 팩키지에 있는지 확신을 못하거나, 구체적인 철자법을 모르는 경우, 퍼지 검색(fuzzy search)을 실행한다:

??function_name

어디서 시작해야 될지 아무 생각이 없을 때

어떤 함수 혹은 팩키지가 필요한지 모르는 경우, CRAN Task Views 사이트가 좋은 시작점이 된다. 유지관리되는 팩키지 목록이 필드로 묶여 잘 정리되어 있다.

코드가 동작하지 않을 때: 동료로부터 도움을 구한다

함수 사용에 어려움이 있는 경우, 10 에 9 경우에 찾는 정답이 이미 Stack Overflow에 답글이 달려 있다. 검색할 때 [r] 태그를 사용한다:

원하는 답을 찾지 못한 경우, 동료에게 질문을 만드는데 몇가지 유용한 함수가 있다:

?dput

dput() 함수는 작업하고 있는 데이터를 텍스트 파일 형식으로 덤프해서 저장한다. 그래서 다른 사람 R 세션으로 복사해서 붙여넣기 좋게 돕는다.

sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:
[1] ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/ko_KR.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] checkpoint_0.4.5 stringr_1.3.1    knitr_1.20       extrafont_0.17  
[5] ggthemes_4.0.0   ggplot2_3.0.0   

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.18     Rttf2pt1_1.3.7   bindr_0.1.1      magrittr_1.5    
 [5] tidyselect_0.2.4 munsell_0.5.0    colorspace_1.3-2 R6_2.2.2        
 [9] rlang_0.3.0.1    plyr_1.8.4       dplyr_0.7.6      tools_3.5.1     
[13] grid_3.5.1       gtable_0.2.0     extrafontdb_1.0  withr_2.1.2     
[17] lazyeval_0.2.1   assertthat_0.2.0 tibble_1.4.2     crayon_1.3.4    
[21] bindrcpp_0.2.2   purrr_0.2.5      evaluate_0.11    glue_1.3.0      
[25] stringi_1.2.4    compiler_3.5.1   pillar_1.3.1     scales_1.0.0    
[29] pkgconfig_2.0.1 

sessionInfo()는 R 현재 버젼 정보과 함께 적재된 팩키지 정보를 출력한다. 이 정보가 다른 사람이 여러분 문제를 재현하고 디버그하는데 유용할 수 있다.

도전과제 1

c 연결함수에 대한 도움말을 살펴본다. 다음 명령어를 실행하면, 어떤 종류 벡터가 생성될 것으로 예상되는가:

c(1, 2, 3)
c('d', 'e', 'f')
c(1, 2, 'f')`

도전과제 1에 대한 해답

c() 함수는 벡터를 생성하는데 벡터내 모든 원소는 동일한 자료형태여야 한다. 첫번째의 경우 모든 원소는 숫자형이다. 두번째의 경우 모두 문자형이다. 세번째의 경우 문자형이다: 숫자형은 문자로 강제변환(coerced) 된다.

{.challenge}

도전과제 2

paste 함수에 대한 도움말을 살펴본다. 나중에 이 함수를 사용할 것이다. sepcollapse 인자 사이에 차이는 무엇인가?

도전과제 2에 대한 해답

paste() 함수에 대한 도움말은 다음 명령어를 사용한다:

help("paste")
?paste

sep, collapse 함수 차이는 다소 난해하다. paste 함수는 임의 숫자 인자를 받는데 각가은 임의 길이를 갖는 벡터가 될 수 있다. sep 인자는 결합되는 요소들 사이에 문자를 지정한다; 기본디폴트로 공백이 된다. 반환되는 결과는 벡터로 된다. 반대로 collapse는 원소를 결합한 후에 해당 구분자를 이용하여 축약되어 하나의 문자열이 된다. 예를 들어,

paste(c("a","b"), "c")
[1] "a c" "b c"
paste(c("a","b"), "c", sep = ",")
[1] "a,c" "b,c"
paste(c("a","b"), "c", collapse = "|")
[1] "a c|b c"
paste(c("a","b"), "c", sep = ",", collapse = "|")
[1] "a,c|b,c"

(추가 정보가 필요한 경우, paste 도움말 페이지 하단에 예제를 참조한다. 혹은 example('paste') 명령어를 실행한다.

{.challenge}

도전과제 3

칼럼이 탭(“\t”)와 소수점(“.”)으로 구분되는 csv 파일을 불러올 수 있는 함수(연관된 모수)를 찾아내는데 도움말을 사용해보자. 소수점 구분자에 대한 확인이 중요한데 전세계 동료와 공동작업을 한다면 더욱 그렇다. 왜냐하면 다른 나라는 소수점 표기에 다른 관례를 사용하기 때문이다(예를 들어, 콤마 vs 점) 힌트: ??csv 명령어를 사용해서 csv 관련 함수를 찾아낸다.

도전과제 3에 대한 해답

소수점 구분자를 갖는 탭 구분 파일을 읽어 오는 표준 R 함수는 read.delim()이다. read.table(file, sep="\t") 명령어로 작업을 수행할 수 있다. read.table() 함수에 소수점이 기본설정된 구분자이며, 데이터파일에 hash (#) 문자를 갖가 포함되어 있다면 comment.char 인자도 변경해야 한다.

도움이 되는 웹사이트

Key Points

  • help() 함수를 사용해서 온라인 도움을 얻는다.