2017-05-05 3 views
0

첫 번째 Shiny App을 만들려고하는데 기본적으로 두 개의 간단한 히스토그램을 그릴 수 있도록 앱을 만들려고합니다. 그러나 입력 버튼을 사용하면 두 개의 히스토그램을 나란히 표시할지 선택할 수 있습니다 가로로) 또는 한쪽 아래에 (세로로).Shiny App의 입력 버튼을 사용하여 레이아웃을 반응적으로 어떻게 바꿀 수 있습니까?

아래 코드를 작성하면 실제로 생각했던 것보다 내 생각 프로세스를 설명하기위한 시도가 더 많습니다.

도움 주시면 감사하겠습니다.

library(shiny) 

ui <- fluidPage(
radioButtons('layout', 'Layout:', choices=c('Vertically', 'Horizontally'), inline=TRUE), 
sliderInput(inputId = "num", 
      label = "Choose a number", 
      value = 25, min = 1, max = 100), 
plotOutput("hist1"), 
plotOutput("hist2")) 

server <- function(input,output) { 

if (input$layout == "Horizontally") { 
    output$hist1<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
    output$hist2<-column(3,plotOutput(hist(rnorm(input$num)))) 
} 
else if (input$layout == "Vertically") { 
    output$hist1<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
    output$hist2<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
} 

} 

shinyApp(ui=ui, server=server) 

답변

0

당신은 결과 표시 uiOutput를 입력으로 따라 레이아웃을 만들 수 renderUI을 사용하고 있습니다 :

ui <- fluidPage(
    radioButtons('layout', 'Layout:', choices=c('Vertically', 'Horizontally'), inline=TRUE), 
    sliderInput(inputId = "num", 
       label = "Choose a number", 
       value = 25, min = 1, max = 100), 
    uiOutput("plots")) 

server <- function(input,output) { 
    output$hist1<-renderPlot(hist(rnorm(input$num))) 
    output$hist2<-renderPlot(hist(rnorm(input$num))) 
    output$plots<-renderUI(if (input$layout == "Horizontally") { 
    fluidRow(column(3,plotOutput("hist1")), 
      column(3,plotOutput("hist2"))) 
    } 
    else if (input$layout == "Vertically") { 
     fluidRow(plotOutput("hist1"),plotOutput("hist2")) 
     }) 
} 

shinyApp(ui=ui, server=server) 
+0

좋아요, 감사합니다! 항상 물건을 나란히 표시하는 것을 고려하면, 단 하나의 히스토그램 또는 둘 다를 표시하려면 입력 버튼을 대신 선택하는 방법이 있습니까? – lc23

+0

예, 필요에 따라 renderUI의 내용을 변경하십시오. – HubertL