R용 Shiny 대시보드

소개

Shiny 패키지는 R로 웹 애플리케이션을 쉽게 만들 수 있게 해줍니다. Quarto 대시보드는 Shiny 구성 요소(예: 입력을 제어하는 슬라이더가 있는 플롯)를 포함할 수 있습니다.

이 섹션은 Shiny를 Quarto와 통합하는 방법을 다루며, 기본적인 Shiny 지식이 있다고 가정합니다. Shiny에 대해 더 알아보려면 https://shiny.posit.co/r/getstarted/shiny-basics/lesson1/index.html를 방문하세요. R 대신 Python을 사용한다면 Python용 Shiny 문서를 참고하세요.

따라 해보기

여기서는 설정 코드 분리, 반응형 계산, 사이드바와 탭셋 같은 고급 레이아웃 구성 등 Shiny 대시보드를 만들 때 사용하는 여러 기법을 다루는 심화 예제를 살펴봅니다. 아래는 우리가 만들 대화형 문서입니다.

Diamonds Explorer 앱 스크린샷. 탐색 바에는 Plot(활성)과 Data 두 페이지가 표시된다. 왼쪽 사이드바에는 8개의 입력이 있으며, 샘플 크기 슬라이더, Jitter와 Smooth 체크박스(둘 다 선택됨), X, Y, Color, Facet Row, Facet Col 드롭다운이 있다. 오른쪽에는 clarity로 색을 입힌 cut 대 carat 산점도가 있다.

아래는 이 대시보드의 소스 코드입니다(오른쪽 끝의 숫자를 클릭하면 문법과 동작 방식에 대한 추가 설명을 볼 수 있습니다).

---
title: "Diamonds Explorer"
author: "Barkamian Analytics"
format: dashboard
server: shiny
---

```{r}
#| context: setup
library(ggplot2)
dataset <- diamonds
```

# {.sidebar}

```{r}
sliderInput('sampleSize', 'Sample Size', 
            min=1, max=nrow(dataset),
            value=min(1000, nrow(dataset)), 
            step=500, round=0)
br()
checkboxInput('jitter', 'Jitter')
checkboxInput('smooth', 'Smooth')
```

```{r}
selectInput('x', 'X', names(dataset)) 
selectInput('y', 'Y', names(dataset), names(dataset)[[2]])
selectInput('color', 'Color', c('None', names(dataset)))
```

```{r}
selectInput('facet_row', 'Facet Row',
  c(None='.', names(diamonds[sapply(diamonds, is.factor)])))
selectInput('facet_col', 'Facet Column',
  c(None='.', names(diamonds[sapply(diamonds, is.factor)])))
```

# Plot

```{r}
plotOutput('plot')
```

# Data

```{r}
tableOutput('data')
```

```{r}
#| context: server

dataset <- reactive({
  diamonds[sample(nrow(diamonds), input$sampleSize),]
})
 
output$plot <- renderPlot({
  
  p <- ggplot(
    dataset(), 
    aes_string(x=input$x, y=input$y)) + geom_point()
  
  if (input$color != 'None')
    p <- p + aes_string(color=input$color)
  
  facets <- paste(input$facet_row, '~', input$facet_col)
  if (facets != '. ~ .')
    p <- p + facet_grid(facets)
  
  if (input$jitter)
    p <- p + geom_jitter()
  if (input$smooth)
    p <- p + geom_smooth()
  
  p
  
})

output$data <- renderTable({
  dataset()
})
```
1
server: shiny 옵션은 문서 뒤에서 Shiny Server를 실행하도록 Quarto에 지시합니다.
2
context: setup 셀 옵션은 이 코드 셀이 애플리케이션 시작 시(각 클라이언트 세션 시작 시가 아니라) 실행되도록 지정합니다. 비용이 큰 초기화 코드(예: 데이터 로딩)는 context: setup에 두는 것이 좋습니다.
3
1단계 제목에 .sidebar 클래스를 추가하면 전역 사이드바를 만들 수 있습니다. 사이드바에는 코드 셀뿐 아니라 이미지, 설명 텍스트, 링크도 포함할 수 있습니다.
4
이 선택 입력은 데이터셋의 사용 가능한 열을 기반으로 동적으로 내용을 구성합니다.
5
1단계 제목(여기서는 # Plots# Data)은 대시보드 안에 페이지를 만듭니다.
6
서버 코드(값을 계산하거나 출력하는 반응형 코드)는 context: server 셀에 포함합니다.
7
dataset() 반응형 값은 샘플 크기가 변경될 때마다 데이터셋을 다시 샘플링합니다.
8
renderPlot() 함수는 dataset() 반응형 값이나 다른 입력 옵션이 변경될 때마다 플롯을 다시 생성합니다.
9
renderTable() 함수는 dataset() 반응형 값이 변경될 때마다 표를 다시 생성합니다.

더 알아보기

R용 Shiny 대화형 문서에 대해 더 알아보려면 다음 문서를 참고하세요.

입력 레이아웃는 Shiny 입력을 배치하는 다양한 방법(사이드바, 입력 패널, 입력을 카드에 직접 연결 등)을 설명합니다.

문서 실행는 RStudio와 명령줄에서 대화형 문서를 실행하는 방법과 사용자에게 배포하는 방법을 다룹니다.

실행 컨텍스트는 서로 다른 코드 블록(예: 렌더링 vs. 서빙)이 언제 실행되는지와, 더 반응성 높은 문서를 위한 고비용 계산 캐싱 방법을 깊이 있게 설명합니다.

외부 리소스는 문서에 포함한 리소스(CSS, JS, 이미지 등)를 Shiny가 올바르게 찾도록 하는 방법을 설명합니다.