2017-01-03 2 views
1

Я создаю R Блестящий сюжет и другие виджеты динамически с помощьюUpdate динамически создается участок в R Shiny

#ui.R 
... 
uiOutput("main_panel") 
... 

#server.R 
output$main_panel <- renderUI({ 
           mainPanel(renderPlot({...}), ..., ...) 
           }) 

Это прекрасно работает, но можно обновлять динамически генерируемый участок без изменения других динамически создаваемых виджетов? Все примеры, которые я нашел, связаны со статически создаваемыми виджетами. (Мне также было бы интересно, как сделать динамически созданные виджеты доступными и т. Д.)

+0

Любой шанс, что вы могли бы дать мне некоторую обратную связь? –

ответ

0

я могу динамически генерировать любое соединение пользовательского интерфейса, так как я могу создать именованные входы и выходы динамически, а затем они реагируют на события, как обычно.

#ui.R 
library(shiny) 

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

    headerPanel("Example"), 

    # Sidebar with a slider input for number of observations 
    sidebarPanel(
    checkboxInput("show_dynamic_ui", label="Show dynamic UI", value=TRUE) 
), 

    # Show a plot of the generated distribution 
    mainPanel(
    uiOutput("dynamic_ui") 
) 
)) 

#server.R 
library(shiny) 

shinyServer(function(input, output, session) { 

    output$dynamic_ui <- renderUI({ 
     if (input$show_dynamic_ui) #NULL when not checked 
      fluidPage(
       fluidRow(column(6, sliderInput("dinput", "Number of observations:",min=1, max=1000, value=500))), 
       fluidRow(column(12, plotOutput("dplot"))) 
      ) 
    }) 

    output$dplot<-renderPlot({ 
         dist <- rnorm(as.integer(input$dinput)) 
         hist(dist) 
        }) 
}) 
+1

Еще не понятно мне, что вы хотели. Не могли бы вы уточнить? Что отличает это, что делает правильный ответ? Снимок экрана тоже поможет понять это. –

0

Я думаю, вы хотите иметь возможность обновлять сюжет без ввода пользователем. Предполагая, что я прав, вы можете использовать reactiveTimer для асинхронного обновления, как этот образец, который добавляет точку в дистрибутив, а затем обновляет график каждые полсекунды.

library(shiny) 

ui <- fluidPage(
    sidebarLayout(position = "left", 
       sidebarPanel("Controls", 
        actionButton("gogobutt","Go"), 
        actionButton("stopbutt","Stop"), 
        actionButton("resetbutt","Reset")), 

       mainPanel("Plot", 
          plotOutput("histplot") 
         ) 
)) 
server <- function(input,output,session) { 
    rv <- reactiveValues(x=rnorm(1),run=F) 

    autoInvalidate <- reactiveTimer(intervalMs=500,session) 

    observe({ 
    autoInvalidate() 
    isolate({ if (rv$run) { rv$x <- c(rv$x,rnorm(1)) } }) 
    }) 

    observeEvent(input$gogobutt, { isolate({ rv$run=T  }) }) 
    observeEvent(input$stopbutt, { isolate({ rv$run=F  }) }) 
    observeEvent(input$resetbutt,{ isolate({ rv$x=rnorm(1) }) }) 

    output$histplot <- renderPlot({ 
    htit <- sprintf("Hist of %d rnorms",length(rv$x)) 
    hist(rv$x,col = "steelblue",main=htit,breaks=12) 
    }) 
} 
shinyApp(ui, server) 

Уступая:

enter image description here

+0

Любые отзывы для меня? –

+0

Очень хороший пример, но это не то, что я спросил. –

Смежные вопросы