반응성 101

사례 연구: R의 Shiny로 웹 애플리케이션 만들기

Dean Attali

Shiny Consultant

반응성 기본

  • Shiny는 반응형 프로그래밍을 사용합니다
  • 출력은 입력의 변경에 반응합니다
  • 변수 x 값이 바뀌면, x에 의존하는 모든 것이 다시 계산됩니다
  • 일반 R과 대비:

    x <- 5
    y <- x + 1
    x <- 10
    
  • y의 값은? 6 또는 11?

사례 연구: R의 Shiny로 웹 애플리케이션 만들기

반응 변수

  • 모든 입력은 반응형입니다
  • 렌더 함수 안의 input$<inputId>는 출력을 다시 렌더링하게 합니다

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plotinput$num에 의존합니다

    • input$num이 바뀌면 ⇒

      output$my_plot이 반응합니다

사례 연구: R의 Shiny로 웹 애플리케이션 만들기

반응 컨텍스트

  • 반응 값은 반응 컨텍스트 안에서만 사용 가능
  • 모든 render*() 함수는 반응 컨텍스트입니다
  • 반응 컨텍스트 밖에서 반응 값을 접근하면 ⇒ 오류
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
사례 연구: R의 Shiny로 웹 애플리케이션 만들기

반응 변수 관찰

  • observe({ ... })로 반응 변수를 읽습니다

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • 디버깅에 유용, 반응 변수 추적

  • 각 반응 변수는 의존성을 만듭니다
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
사례 연구: R의 Shiny로 웹 애플리케이션 만들기

반응 변수 생성

  • reactive({ ... })로 반응 변수를 만듭니다

  • 잘못된 예:

    server <- function(input, output) {
        x <- input$num + 1
    }
    
    ERROR: Operation not allowed without an active reactive context.
    
  • 올바른 예:

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
사례 연구: R의 Shiny로 웹 애플리케이션 만들기

반응 변수

  • 사용자 정의 반응 변수는 함수처럼 접근:
    • 괄호 ()를 추가
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
사례 연구: R의 Shiny로 웹 애플리케이션 만들기

연습해 봅시다!

사례 연구: R의 Shiny로 웹 애플리케이션 만들기

Preparing Video For Download...