【问题标题】:Create dynamic input fields for a shiny application为闪亮的应用程序创建动态输入字段
【发布时间】:2016-09-09 18:32:50
【问题描述】:

我正在使用以下数据框来构建闪亮的应用程序:

listIDs <- c(100,100,100,100,200,200,200,200),
values <- c(2.12, 2.43, 2.12, 4.45, 3.23, 4.23, 3.23, 4.23),  
horses <- c(2.1, 3.2, 4.1, 4.2, 5.4, 4.7, 2.8, 2.0),  
month <- c("JAN", "FEB", "JAN", "FEB","MAY","APRIL","MAY", "APRIL"),
df <- data.frame(listIDs, values, horses, month),

我正在使用以下选项卡构建一个闪亮的应用程序:

ui.R

shinyUI(fluidPage(

#outlinen title
titlePanel(title = "This is the title"),
sidebarLayout(
 sidebarPanel(
  
  selectInput("var1", "Select the eventID", choices = listIDs),
  selectInput("var2", "Select the eventID", choices = month),
  br()
 ),

 mainPanel(("Personal information"),
          plotOutput("myhist"))
)
)) 

服务器.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output){

output$myhist <- renderPlot({

df_graph <- df[df$listIDs == input$var1,]
df_graph <- df_graph[df_graph$month == input$var2,]

ggplot(data=df_graph, aes(x=month, y=values, group = horses)) +
  geom_line() + geom_point() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

})
})

一切正常,但问题是,当我在第一个选择框中选择 100 时,我仍然会得到选项“JAN”、“FEB”、“MRT”、“APRIL”(而我只应该得到 JAN 和 FEB) .有什么想法可以让这种动态变化吗?

【问题讨论】:

标签: r shiny


【解决方案1】:

对应于月份选择的selectInput 元素应根据input$var1 的值动态呈现。这是一个简单的例子:

shinyApp(
    ui = fluidPage(

        titlePanel(title = "This is the title"),
        sidebarLayout(
            sidebarPanel(
                selectInput("var1", "Select the eventID", 
                            choices = listIDs
                ),
                uiOutput("select_month_ui"),
                br()
            ),
            mainPanel(
                "Personal information",
                plotOutput("myhist")
            )
        )
    ),
    server = function(input, output) {
        output$select_month_ui <- renderUI({
            selectInput("var2", "Select the eventID", 
                        choices = df[df$listIDs %in% input$var1,"month"]
            )
        })

        output$myhist <- renderPlot({
            df_graph <- df[df$listIDs == input$var1,]
            df_graph <- df_graph[df_graph$month == input$var2,]

            ggplot(data = df_graph, 
                    aes(x = month, y = values, group = horses)) +
                geom_line() + geom_point() + 
                theme(axis.text.x = element_text(angle = 90, hjust = 1))
        })
    }
)

selectInput 对象从您的 UI 代码移动到服务器代码中

    output$select_month_ui <- renderUI({
        selectInput("var2", "Select the eventID", 
                    choices = df[df$listIDs %in% input$var1,"month"]
        )
    }) 

并替换为uiOutput("select_month_ui")

【讨论】:

  • 另一种方法是根据来自input$var1 的事件使用updateSelectInput(也在服务器端)。
  • @warmoverflow 好点;您应该添加该替代方案作为答案。
猜你喜欢
  • 2015-11-12
  • 2015-06-13
  • 1970-01-01
  • 2016-08-15
  • 2016-12-25
  • 2022-06-25
  • 2015-05-13
相关资源
最近更新 更多