이번 포스팅에서는 R Shiny를 사용하여

 

- (1) 두 개의 독립 표본 집단 간 평균 차이 t-검정 (independent two-sample t-test) 

- (2) 신뢰수준 별 신뢰구간 (confidence interval by confidence level)

을 구하는 웹 애플리케이션을 만들어보겠습니다. 

 

예제로 사용한 데이터는 MASS 패키지의 Cars93 데이터프레임이며, 'Origin'  변수의 두 개 집단(USA, Non-USA) 별로 Price, RPM, Length, Width 변수 간의 t-test 를 해보겠습니다. 

 

왼쪽 사이드바 패널에는 t-검정을 할 변수를 선택할 수 있는 콤보 박스와, 신뢰수준(confidence level)을 지정할 수 있는 슬라이드 입력(default = 0.95) 화면을 만들었습니다. 

그리고 메인 패널에는 변수 이름, 신뢰수준, t-검정 결과를 텍스트로 보여줍니다. 

 

R Shiny - independent two-sample t-test

 

library(shiny)

# Define UI for application that does t-test

ui <- fluidPage(

   

   # Application title

   titlePanel("Independent two sample t-test"),

   

   # Select a variable to do t-test by Origin (USA vs. non-USA groups)

   sidebarPanel(

     selectInput("var_x", 

                 label = "Select a Variable to do t-test", 

                 choices = list("Price"="Price", 

                                "RPM"="RPM", 

                                "Length"="Length", 

                                "Width"="Width"), 

                 selected = "Price"), 

     

     sliderInput("conf_level", "Confidence Level:", 

                  min = 0.05, max = 0.99, value = 0.95)

     ),

   

   # Show a t-test result

   mainPanel(

     h5("Variable is:"),

     verbatimTextOutput("var_x_name"), 

     h5("Confidence Level is:"),

     verbatimTextOutput("conf_level"), 

     h4("t-test Result by Origin (USA vs. non-USA independent two samples)"), 

     verbatimTextOutput("t_test")

   )

)

# Define server logic required to do t-test

server <- function(input, output) {

  

  library(MASS)

  cars93_sub <- Cars93[, c('Origin', 'Price', 'RPM', 'Length', 'Width')]

  

  output$var_x_name <- renderText({

    as.character(input$var_x)

  })

  

  output$conf_level <- renderText({

    as.character(input$conf_level)

  })

  

  output$t_test <- renderPrint({

    # independent two-sample t-test

    t.test(cars93_sub[,input$var_x] ~ Origin, 

           data = cars93_sub, 

           alternative = c("two.sided"), 

           var.equal = FALSE, 

           conf.level = input$conf_level)

  })

}

 

# Run the application 

shinyApp(ui = ui, server = server)

 

많은 도움이 되었기를 바랍니다. 

 

728x90
반응형
Posted by Rfriend
,

이번 포스팅에서는 R Shiny를 사용하여 interactive하게 편하고 쉽게 두 연속형 변수 간 관계를 알아볼 수 있도록 

(1) 상관계수 (Correlation Coefficient)를 구하고, 

(2) 산점도 (Scatter Plot)을 그린 후, 

(3) 선형 회귀선 (Linear Regression Line) 을 겹쳐서 그려주는 

웹 애플리케이션을 만들어보겠습니다. 

 

 

R Shiny - Correlation Coefficient, Scatter Plot, Linear Regression Line

 

예제로 사용할 데이터는 MASS 패키지에 내장되어 있는 Cars93 데이터프레임으로서, Price, MPG.city, MPG.highway, EngineSize, Horsepower, RPM 의 6개 연속형 변수를 선별하였습니다. 

 

왼쪽 사이드바 패널에는 산점도의 X축, Y축에 해당하는 연속형 변수를 콤보박스로 선택할 수 있도록 하였으며, 상관계수와 선형회귀모형을 적합할 지 여부를 선택할 수 있는 체크박스도 추가하였습니다. 

 

오른쪽 본문의 메인 패널에는 두 연속형 변수에 대한 산점도 그래프에 선형 회귀선을 겹쳐서 그려서 보여주고, 상관계수와 선형회귀 적합 결과를 텍스트로 볼 수 있도록 화면을 구성하였습니다. 

 

library(shiny)

# Define UI for application that analyze correlation coefficients and regression

ui <- fluidPage(

   

   # Application title

   titlePanel("Correlation Coefficients and Regression"),

   

   # Select 2 Variables, X and Y 

   sidebarPanel(

     selectInput("var_x", 

                 label = "Select a Variable of X", 

                 choices = list("Price"="Price", 

                                "MPG.city"="MPG.city", 

                                "MPG.highway"="MPG.highway", 

                                "EngineSize"="EngineSize", 

                                "Horsepower"="Horsepower", 

                                "RPM"="RPM"), 

                 selected = "RPM"),

     

     selectInput("var_y", 

                 label = "Select a Variable of Y", 

                 choices = list("Price"="Price", 

                                "MPG.city"="MPG.city", 

                                "MPG.highway"="MPG.highway", 

                                "EngineSize"="EngineSize", 

                                "Horsepower"="Horsepower", 

                                "RPM"="RPM"), 

                 selected = "MPG.highway"), 

     

     checkboxInput(inputId = "corr_checked", 

                   label = strong("Correlation Coefficients"), 

                   value = TRUE), 

     

     checkboxInput(inputId = "reg_checked", 

                   label = strong("Simple Regression"), 

                   value = TRUE)

      ),

      # Show a plot of the generated distribution

      mainPanel(

        h4("Scatter Plot"), 

        plotOutput("scatterPlot"), 

        

        h4("Correlation Coefficent"), 

        verbatimTextOutput("corr_coef"), 

        

        h4("Simple Regression"), 

        verbatimTextOutput("reg_fit")

      )

   )

# Define server logic required to analyze correlation coefficients and regression

server <- function(input, output) {

  library(MASS)

  scatter <- Cars93[,c("Price", "MPG.city", "MPG.highway", "EngineSize", "Horsepower", "RPM")]

  

  # scatter plot

  output$scatterPlot <- renderPlot({

    var_name_x <- as.character(input$var_x)

    var_name_y <- as.character(input$var_y)

    

    plot(scatter[, input$var_x],

         scatter[, input$var_y],

         xlab = var_name_x,

         ylab = var_name_y,

         main = "Scatter Plot")

    

    # add linear regression line

    fit <- lm(scatter[, input$var_y] ~ scatter[, input$var_x])

    abline(fit)

    })

  

  # correlation coefficient

  output$corr_coef <- renderText({

    if(input$corr_checked){

      cor(scatter[, input$var_x], 

          scatter[, input$var_y])

      }

    })

  

  # simple regression

  output$reg_fit <- renderPrint({

    if(input$reg_checked){

      fit <- lm(scatter[, input$var_y] ~ scatter[, input$var_x])

      names(fit$coefficients) <- c("Intercept", input$var_x)

      summary(fit)$coefficients

    }

  })

}

# Run the application 

shinyApp(ui = ui, server = server)

 

많은 도움이 되었기를 바랍니다. 

 

728x90
반응형
Posted by Rfriend
,

R Shiny를 이용하면 탐색적 데이터 분석(Exploratory Data Analysis)을 할 때 요약 통계량, 그래프를 변수, 기간, 통계량, 그래프 종류 등을 자유롭게 조건 선택하고 조합하여 편리하게 사용할 수 있습니다. 

 

이번 포스팅에서는 R Shiny로 DataFrame 의

(1) 특정 연속형 변수를 선택하고 

(2) 분석하고 싶은 요약 통계량을 선택했을 때 

(3) 요약 통계량 결과를 interactive하게 볼 수 있는 웹 애플리케이션을 만들어보겠습니다. 

 

Output Image는 아래와 같습니다. 

 

[ R Shiny 를 활용한 연속형 변수 요약 통계량 조회 웹 애플리케이션 화면 ]

R Shiny - Summary Statistics

 

먼저 R Studio 에서 'File > New File > Shiny Web App' 을 선택해주세요. 

 

 

다음으로, (a) 애플리케이션의 이름, (b) 애플리케이션 유형 (간단한 것이면 하나의 파일에 UI와 Server를 함께 만드는게 편하구요, 복잡한 것이면 ui.R, server.R 의 두 개의 파일로 분리하는 것이 편리함), (c) 애플리케이션 저장 경로 (위치)를 지정해주고, Create 해줍니다. 

 

 

이제 R Shiny 코드를 짜볼 텐데요,

먼저 UI 부분에서는 (a) 왼쪽 사이드바에서 분석 대상이 되는 변수를 콤보 박스로 선택하는 화면, (b) 왼쪽 사이드바에서 요약 통계량을 선택하는 체크 박스 화면, (c) 중앙 메인 패널에서 보여줄 제목과 요약 통계량 테이블을 지정해줍니다. 

 

그리고 Server 부분에서는 (a) MASS 패키지의 Cars93 데이터 프레임으로 부터 일부 6개의 연속형 변수 데이터 읽어오기, (b) 요약 통계량 계산하기 (단, 결측값은 제외하기), (c) 요약 통계량들을 하나의 데이터 프레임으로 만들기, (d) 데이터 프레임 테이블을 렌더링 해줍니다. 

 

#------------------------------------------------------------------ 
# Summary Statistics of a Continuous Variable using RShiny 
#------------------------------------------------------------------

library(shiny)

# Define UI for application that calculate summary statistics
ui <- fluidPage(
   
   # Application title
   titlePanel("Descriptive Statistics of Automobiles"),
   
   # select Input from lists 
   sidebarPanel(
     selectInput("var", "Select a Variable to Analyze", 
                 choice = c("Price"=1, 
                            "MPG.city"=2, 
                            "MPG.highway"=3, 
                            "EngineSize"=4, 
                            "Horsepower"=5, 
                            "RPM"=6), 
                 selectize = F), 
     
     checkboxGroupInput("checked", "Check summary statistics", 
                        list(mean = "mean", 
                             std_dev = "std_dev", 
                             median = "median", 
                             min = "min", 
                             max = "max", 
                             obs_num = "obs_num", 
                             quartile_1 = "quartile_1", 
                             quartile_3 = "quartile_3"), 
                        selected = "mean")
   ), 
   mainPanel(
     h4("Summary Statistics of a variable"),
     tableOutput("desc_statistics")
   )
)

# Define server logic required to calculate summary statistics
server <- function(input, output) {
  # read dataset
  library(MASS)
  descriptive <- Cars93[,c("Price", "MPG.city", "MPG.highway", "EngineSize", "Horsepower", "RPM")]

  output$desc_statistics <- renderTable({
    # summary statistics
    variable <- colnames(descriptive)[as.numeric(input$var)]
    mean <- mean(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    std_dev <- sd(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    median <- median(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    min <- min(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    max <- max(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    obs_num <- nrow(descriptive)
    quartile_1 <- quantile(descriptive[, as.numeric(input$var)], 0.25, na.rm=TRUE)
    quartile_3 <- quantile(descriptive[, as.numeric(input$var)], 0.75, na.rm=TRUE)
    
    # make a DataFrame
    desc_summary <- data.frame(variable, 
                               mean, std_dev, 
                               median, min, max, 
                               obs_num, 
                               quartile_1, quartile_3)
    
    # render Table
    desc_summary[, c("variable", input$checked), drop = FALSE]
  })
}

 


# Run the application 
shinyApp(ui = ui, server = server)

 

 

마지막으로, shinyApp(ui = ui, server = server) 로 UI와 Server를 지정해주고, 저장한 후에, RStudio 우측 상단의 'Run App' 단추를 눌러서 실행시켜주면 됩니다. 

 

많은 도움이 되었기를 바랍니다. 

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 

- RStudio 에 내장되어 있는 .Rmd 소스파일을 가지고 HTML 문서를 만들기와 

- servr 패키지의 rmdv2() 함수를 사용해서 .Rmd 소스파일을 렌더링해서 로컬 웹 서버(포트 4321)로 올리는 방법을 알아보았습니다. 


이번 포스팅부터는 .Rmd 소스파일 안으로 들어가서 하나씩 더 자세히 알아보도록 하겠습니다. 

.Rmd 소스파일은 (1) YAML Header, (2) Code Chunk, (3) Markdown text 로 구성됩니다.  이중에서 이번 포스팅에서는 먼저 (1) YAML Header부터 시작해보겠습니다. 


[ .Rmd source file 구성 ]


YAML Header에는 title, author, date, output 등의 메타정보를 지정합니다.  특히, output 필드에는  rmarkdown 문서의 포맷으로서 HTML, pdf, MS word, Beamer Presentation 등을 지정할 수가 있는데요, 이번 포스팅에서는 HTML output format 에 대해서 소개하겠습니다. 




YAML Header 작성에 지켜야하는 문법이 몇가지 있습니다. 


(1) YAML Header는 '---' 로 시작해서 안에 문서에 대한 메타정보를 작성하고 '---'로 끝을 냅니다. 

(2) 상하관계는 space bar 로 들여쓰기(보통 2칸)를 해서 구분합니다. 

(3) 각 필드는 colon (':') 을 이용해서 key : value 형태로 입력합니다. (예 title: "My_First_R_MarkDown")

(4) value 는 큰 따옴표(" ")나 작은 따옴표(' ')를 사용하거나 혹은 그냥 아무런 표시 없이 입력합니다.

(5) key : value 쌍에서 value가 2개 이상일 경우 (5-1) 대괄호([ ]) 안에 value를 나열하고 comma(,) 로 구분하거나, 또는 (5-2) 한 줄에 한개의 value를 hyphen ('-')을 사용해서 나열합니다. 

---

Seoul: [Jonro, Gangnam, Ganak]

Sungnam:

  - Bungdang

  - Suwon

  - Anyang

---  




이제 YAML Header 의 output: html_document 를 사용해서 HTML 문서의 옵션을 설정하는 방법을 소개하겠습니다.  그리 어렵지 않습니다. 


 (1) 목차 만들기 (Table of Contents) > toc: true


toc: true 옵션을 설정해주면 목차를 자동으로 생성해줍니다. 

toc_depth: 2 옵션을 설정해주면 목차를 자동 생성할 때 목차의 깊이(depth)를 어디까지 할지 지정해줄 수 있습니다. '2'로 하면 '##', '3'으로 하면 '###' 수준까지 목차를 알아서 만들어줍니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output

  html_document

    toc: true

    toc_depth: 2

--- 



 (2) 문서 단락 번호 자동부여 하기 (section numbering) > number_sections: true

문서의 단락('#', '##', '###' 등으로 구분)에 따라서 자동으로 문서 번호를 부여하기 위해서는 number_sections: true 옵션을 지정해주면 됩니다.  문서 작성할 때 알아서 스마트하게 번호를 따주면 실수할 염려도 없고 신경쓸 일도 없어서 아주 유용하겠지요?!

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    number_sections: true

--- 



  (3) 유동적인 목차 만들기 (Floating TOC) > toc_float: true

만약 문서가 길다면 커서로 HTML 문서를 scrolling 하게 되면 상단에 위치한 목차(Table of Contents)가 시야에서 사라지게 됩니다.  그래서 목차를 보려면 다시 scroll up 해야 하는 불편이 있습니다.  이럴때 유용하게 사용할 수 있는 옵션이 toc_float: true 옵션입니다.  scroll 하면 목차가 현재 화면으로 따라다니면서 항상 목차를 볼 수 있도록, 그래서 목차의 특정 하위 목차를 선택하면 바로 그 목차 부분으로 직행할 수 있는 인터페이스를 제공해줍니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    toc_float: true

    number_sections: true

---


toc_float: 옵션의 디폴트 설정은 collapsed: true (목차에 최상위 수준만 나타남), smooth_scroll: true (특정 목차를 마우스로 선택했을 때 웹 화면이 부드럽게 움직이면서 해당 목차로 이동) 인데요, 이걸 바꾸고 싶다면 아래처럼 설정을 바꾸면 됩니다. 상하 위계를 고려해서 들여쓰기(indentation) 주의해서 하시기 바랍니다. 

---

title: "My_First_R_MarkDown"

output:

  html_document:

    toc: true

    toc_float:

      collapsed: false

      smooth_scroll: false

---



  (4) 탭으로 구분하여 부분별 내용 만들기 (Tabbed Sections) > {.tabset} class


{.tabset} class attribute 을 사용하면 HTML 본문 내용을 탭(Tab) 으로 구분하고, 탭을 선택하면 그 부분의 내용이 나타나도록 할 수도 있습니다. 가령, 국가나 지역별로 매출, 수익 등을 표로 작성한 후에 국가나 지역을 탭(tba)으로 구분해 주면 원하는 국가나 지역 탭을 선택해서 볼 수 있어 편리할 것입니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    toc_float:

      collapsed: true

      smooth_scroll: true

    number_sections: true

---


## Tab by country {.tabset}

### Korea

this tab is for Korea


### China

this tab is for Chian


### Japan

this tab is for Japan




  (5) HTML 문서 모습과 스타일 (Appearance and Style) > theme: cerulean

HTML 문서의 전체적인 모습과 스타일을 지정해줄 수 있는 theme 옵션에는 "default",  "cerulean", "journal", "flatly", "readable", "spacelab", "united", "cosmo", "lumen", "paper", "sandstone", "simplex", "yeti" 등이 있습니다.  

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_float: true

    number_sections: true

    theme: journal

---


다양한 theme 중에서 아래 화면 캡쳐 예시를 참고해서 원하는 취향의 theme을 선택해서 지정해주면 됩니다. 


[ 다양한 HTML 문서 스타일 theme ]






많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^







728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 knitr 을 사용해서 source file 로 부터  R code 를 실행하고 pandoc 패키지로 Markdown 문서를 HTML 로 변환하는 작업을 소개하였습니다. 

지난번 포스팅에 이어서, 이번 포스팅에서는현재 작업 경로에 있는 파일 중 '.Rmd' 확장자 이름을 가진 R Markdown 문서들에 대해서 knitr 이나 rmarkdown 을 사용해서 다시 컴파일하고, 이를 연동시켜서 HTML 페이지가 자동으로 갱신되도록 해주는 servr (Serve R Markdown based websites) 패키지의 rmdv2() 함수 사용법을 소개해보겠습니다. 간단히 말해서 R 과 HTML 페이지가 서로 연결되어서 R로 '.Rmd' 파일을 변경시키면 HTML 페이지가 자동으로 알아서 통신을 해서 문서를 갱신해준다는 뜻입니다. 


작업 순서는 아래와 같습니다. 


======================

1. 미리 만들어놓은 R Markdown Project 가 있다면 불러오기

2. servr 패키지 설치하고 불러오기 

3. rmdv2() 함수를 사용해서 '.Rmd' 파일을 다시 컴파일하고 HTML 페이지 자동 갱신하기

4. 데몬 중지시키기 : servr::daemon_stop() 함수

======================



1. 미리 만들어놓은 R Markdown Project 가 있다면 불러오기 


이전 포스팅에서 만들어 두었던 'RMarkDownDir' Project 를 불러오도록 하겠습니다. 아래의 화면캡쳐에 표시해 놓은 것처럼 RStudio Environment 화면 최우측 상단의 검정색 네모 상자에 아이콘을 클릭하면 Project list 가 나타나구요, 여기서 해당 프로젝트를 선택하면 됩니다. 

Project를 선택하고 나면 해당 디렉토리에 있는 파일들을 불러오며, 작업 경로가 자동으로 세팅되고, 추가 작업하고 저장하고, 버전관리하고, 이래저래 매우 편리합니다. 


[ R Project 리스트 확인하고 불러오기 ]



> # chceking working directory

> getwd()

[1] "C:/Users/Administrator/Documents/R_DynamicDoc/RMarkDownDir"

 



2. servr 패키지 설치하고 불러오기 


servr 패키지는 간단히 말해서 "A simple HTTP server in R" 입니다. 

(* https://cran.r-project.org/web/packages/servr/servr.pdf : Start an HTTP server in R to serve static files, or dynamic documents that can be converted to HTML files (e.g., R Markdown) under a given directory)


library(knitr)

library(rmarkdown)


# installing servr package

# Serve R Markdown based websites

install.packages("servr")

library(servr)




3. rmdv2() 함수를 사용해서 '.Rmd' 파일을 다시 컴파일하고 HTML 페이지 자동 갱신하기



# rendering .Rmd files, refreshing local web server automatically by using rmdv2() function

rmdv2(serve = TRUE, in_session = FALSE, daemon=TRUE)

 


- serve = TRUE : 웹사이트를 serve 함 

- in_session = FALSE : 현재의 R session 에서 R Markdown 을 rendering 하지 않고, 각각의 source document를 서로 다른 session 에서 컴파일 함 (default setting 은 FALSE 임)

- daemon = TRUE : 현재의 R session 을 막지않고 serve 함


우측 하단의 Viewer 창을 보면 아래 처럼 웹 경로가 미리보기처럼 생겼습니다. 



웹 브라우저를 하나 뜨우고서 'http://localhost:4321' 을 입력해보세요. 그러면 아래의 화면 캡쳐처럼 로컬 웹 서버에서 R Markdown Project 의 파일들과 경로를 볼 수 있습니다. 



위의 Index of ./  웹 화면에서 'My_First_R_MarkDown.html' 링크를 클릭하면 아래처럼  R Markdown 문서가 HTML 로 변환(텍스트, R code, R summary statistics, Plots) 된 결과를 볼 수 있습니다. 

전체 경로는 http://localhost:4321/My_First_R_MarkDown.html 이 되겠지요. 


4. 데몬 중지시키기 : daemon_stop() 함수


# To stop the server, use servr::daemon_stop() function

daemon_stop()

 


이상으로 R servr 패키지를 사용해서 .Rmd 파일들을 자동 rendering 하고 로컬 웹 서버로 올리는 방법 소개를 마치겠습니다. 


다음번 포스팅에서는 .Rmd 소스파일의 코드 문법에 대해서 알아보겠습니다. 


많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되셨다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^

728x90
반응형
Posted by Rfriend
,

R 통합개발환경(IDE)인 RStudio 를 사용해서 R code와 함께 텍스트를 혼합해서 HTML, PDF, MS Word 등의 다양한 형태의 문서를 문들 수 있습니다. 

데이터, 통계분석 코드와 텍스트가 수미일관되게 하나의 문서 안에서 관리될 수 있다면 버전 관리의 어려움을 덜 수 있어서 재현가능한 연구(Reproducible Research) 관점에서 매우 유용합니다. 

기존의 사용 방법과 비교를 해보겠습니다. 기존 대로라면 R로 코드를 짜고 (혹은 엑셀을 사용해서), 요약통계량도 뽑고, 추정, 검정도 하고, 그래프도 그린 다음에 이걸 HTML, 워드나 파워포인트복사 & 붙여넣기(copy & paste), 혹은 화면 캡쳐를 해서 붙여넣기를 했을 겁니다.  그런데 만약 raw data에 변경 사항이 발생하면 이후의 작업에 모두 영향을 미치게 되며, 일일이 찾아가서 수정을 해줘야 합니다.(업계 전문용어로 시간 잡아먹는 쌩노가다...-_-;)  시간도 아까울뿐더러, 행여 실수로 최신 데이터 결과로 업데이트 하는 것을 빼먹기라도 하면 의사결정을 하는데 있어 심각한 오류를 범하게 할 수도 있습니다. 

이번 포스팅에서 다룰 내용은 바로 이런 난맥을 해결할 수 있는 방법입니다. 그리고 HTML 로 만들어서 웹상에서 공유하면 여러사람이 공유, 협업하는데도 유용할 것입니다. 


[ R Markdown : Analyze. Share. Reproduce. ]

* source : http://rmarkdown.rstudio.com/


다음의 순서대로 소개를 하겠습니다.

=========================================

1. knitr, rmarkdown package 설치하기

2. RStudio Project 만들기

3. R Markdown 문서 만들기 (HTML)

=========================================


 1. knitr, rmarkdown package 설치하기


knitr ('니터'라고 발음), rmarkdown, pandoc package가 필요한데요, 이중에서 pandoc은 RStudio를 설치할 때 알아서 같이 설치가 되므로 신경 안쓰셔도 됩니다. 


# installing knitr, rmarkdown packages

install.packages("knitr")

install.packages("rmarkdown")

library(knitr)

library(rmarkdown)

 




 2. RStudio Project 만들기 


Project는 동일 목적의 단위 작업에 사용된 파일들을 하나의 단일 폴더에 관리할 수 있도록 해주므로 파일 관리, 버전 관리 등에 유용합니다. 

새로운 Project 를 만들려면 RStudio 의 왼쪽 상단 메뉴에서 File > New Project... 를 선택하면 아래와 같은 팝업 화면이 나타납니다. 

이번 포스팅에서는 새로 디렉토리를 만들어서 예를 들 것이므로 'New Directory' 메뉴를 선택해보겠습니다. 


[ File > New Project... > Create Project : New Directory ]



'New Directory' 메뉴를 선택하며 아래처럼 Project Type을 선택하는 화면이 뜹니다. 'Empty Project'를 선택해보겠습니다. (R Package 나 Shiny Web Application 은 나중에 별도 포스팅하겠습니다)


 [ Project Type : Empty Project ]



그 다음으로는 아래처럼 디렉토리 이름(directory name:)과 새로 만들 디렉토리가 위치할 경로(subdirectory of ~)를 지정해주는 화면이 뜹니다.  다 입력하고 나면 하단의 'Create Project' 단추를 눌러주세요. 


[ Directory name : 00000, Create project as subdirectory of : ~/00000 ]



여기까지 실행을 해주면 RStudio 의 우측 하단에 'Files' 메뉴에 방금 전에 지정해주었던 'RMarkDownDir' 이라는 이름의 새로운 디렉토리가 생성되었음을 알 수 있습니다.  그리고 그 폴더 안에 'RMarkDownDir.Rproj' 라는 파일도 새로 만들어졌습니다. 


작업 디렉토리(working directory)를 확인해보니 방금 전에 만든 Project 폴더로 세팅이 되어 있음을 확인할 수 있습니다.  나중에 'RMarkDownDir Project'를 선택해서 실행을 시키면 작업 디렉토리를 알아서 아래처럼 자동 세팅해주므로 편리합니다. 


> # chceking working directory

> getwd()

[1] "C:/Users/Administrator/Documents/R_DynamicDoc/RMarkDownDir"

 


나중에 여러개의 Project를 만들어서 사용하게 되는 경우라면 RStudio 의 우측 상단에 Project list 를 확인하고 선택해서 넘나들 수 있는 아이콘과 메뉴가 있습니다.  아래 화면캡쳐에서는 'RMarkDownDir' 라는 방금 전에 만든 Project만 보이지만요, 다른 프로젝트도 만들면 여러개가 동시에 보일거예요. (참고로, 우측 상단 아이콘 클릭했을 때 첫 줄에 나오는 'New Project' 를 선택하면 역시 새로운 프로젝트를 만들 수 있습니다)



 3. R Markdown 문서 만들기


3-1) 왼쪽 상단의 메뉴에서 File > New File > R Markdown... 메뉴를 선택


3-2) Document 선택 > Title, Author 입력 > Default Output Format에서 HTML 선택 > OK 클릭

(Presentation, Shiny 등은 나중에 별도 포스팅하겠습니다)



3-3) 아래처럼 예제 R Markdown 이 새로 만들어지는데요, title, author는 방금전 팝업 화면에서 입력한 내용이 들어가 있습니다. (간단한 샘플 코드가 들어가 있으니 참고하시면 됩니다)


R Markdown 문서를 rendering 하는 절차는 크게 2단계로 나뉘는데요, 먼저 knitr 패키지로 source code에서 R code 를 실행을 하면 .Rmd 파일이 생성됩니다. 그 다음에 pandoc 패키지를 사용해서 Markdown 을 HTML, PDF, Word 등으로 변환하는 작업을 하면 '.md' 파일이 생성됩니다. 



3-4) Knit > Knit to HTML 선택하면 R code를 knitr 가 실행하고 pandoc 이 HTML로 변환해줌

(단축키 : Ctrl + Shift + K)



3-5) '.Rmd' 파일, 'HTML' 파일이 생성

우측 하단의 'File' 메뉴란을 확인해보시면 아와 같이 '.Rmd' 파일, 'HTML' 파일이 새로 만들어졌습니다. 




3-6) Preview in Viewer Pane 세팅

'Preview in Viewer Pane' 에 체크를 해놓으면 RStudio 우측 하단에 있는 Viewer 에서 HTML 을 미리보기 할 수 있어서 편리합니다. 


3-9) 'Viewer' 확인해보기

우측 하단의 'Viewer' 메뉴에 가서 보면 HTML  형태의 문서를 미리 볼 수가 있습니다. 
(샘플로 예제 하나가 미리 들어가 있으며, 필요한 부분은 샘플 참고해서 수정해가면서 본문 내용 채우면 됨)



3-10) 문서의 전체 목차 한꺼번에 보기(show document outline)

아래 화면 캡쳐해놓은 것처럼 우측 상단의 아이콘('show document outline')을 클릭하면 문서 전체의 목차(outline)을 한눈에 일목요연하게 볼 수 있습니다. 그리고 목차 중의 하나를 선택하면 해당 문서의 단락으로 바로 이동한답니다.  코드가 긴 경우에 '##==== ~~~' 으로 코드 단락을 구분해주면 나중에 전체 조망하기에도 좋고, 바로 원하는 단락으로 직행할 수도 있으므로 매우 편리한 기능이라고 하겠습니다.  단축키는 'Ctrl + Shift + O' 입니다. 


3-11) 문서 단락별로 접었다 펴기(fold, unfold)

아래 화면캡쳐한 부분의 왼쪽 검정색 상자로 표시해 놓은 것처럼 삼각형 뒤집어 놓은 부분을 클릭하면 해당 단락이 접혀(fold)집니다. 토글 기능으로 되어 있어서 한번 더 누르면 다시 펴집니다(unfold). 

많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되셨다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^




728x90
반응형
Posted by Rfriend
,