【问题标题】:How to convert checkboxGroupInput into vector/use in outside function如何将 checkboxGroupInput 转换为向量/在外部函数中使用
【发布时间】:2019-06-12 11:42:56
【问题描述】:

我正在尝试从 Shiny 应用程序中的 checkboxGroupInput 接口获取输入,然后在按下操作按钮时获取该输入并通过外部函数运行它。我无法弄清楚将 input$countries 转换为函数将接受的向量。有没有办法将此输入转换为我可以使用的向量,或者我是否必须重新设计我的函数才能以其他方式处理输入数据?谢谢!

library(shiny)
library(DT)

countries <- c("United States", "Mexico", "Canada","United Kingdom", 
"Norway", "Netherlands","China", "Australia")
dataChoices <- c("Country Data", "Operator Data")
ui <- fluidPage(
  titlePanel("GO-GET"),
  tabsetPanel(
    tabPanel(title = "Scenario",
    sidebarLayout(
      sidebarPanel(
      actionButton(inputId = "run",
               label = "Run Scenario"),
      navlistPanel(
        tabPanel("Country Selection",
          checkboxGroupInput("countries", choices = countries,
                     selected = countries,
                     label = h3("Country Selection") 
                     )
          ),
        tabPanel("Country Reductions",
      conditionalPanel(condition = "input.countries.includes('United 
States')", 
                   sliderInput("United States", label = "United States", 
min=0, max=100, value=45)
      ),
      conditionalPanel(condition = "input.countries.includes('Mexico')", 
                 sliderInput("Mexico", label = "Mexico", min=0, max=100, 
value=45)
      ),
      conditionalPanel(condition = "input.countries.includes('Canada')", 
                 sliderInput("Canada",label = "Canada", min=0, max=100, 
value=45)
      ),
      conditionalPanel(condition = "input.countries.includes('United 
Kingdom')", 
                 sliderInput("United Kingdom", label = "United Kingdom", 
min=0, max=100, value=45)
      ),
      conditionalPanel(condition = "input.countries.includes('Norway')", 
                 sliderInput("Norway", label = "Norway", min=0, max=100, 
value=45)
      ),
      conditionalPanel(condition = 
"input.countries.includes('Netherlands')", 
                 sliderInput("Netherlandss", label = "Netherlands", 
min=0, max=100, value=45)
      ),
      conditionalPanel(condition = "input.countries.includes('China')", 
                 sliderInput("China", label = "China", min=0, max=100, 
 value=45)
      ),
      conditionalPanel(condition = 
"input.countries.includes('Australia')", 
                 sliderInput("Australia", label = "Australia", min=0, 
max=100, value=45)
      ))),
      width = 6),
    mainPanel(
      plotOutput("data", width = "400px"), width = 6
    )
  )
  ),
  tabPanel(title = "Charts"),
  tabPanel(title = "Data",
           selectInput("data", label = h3("Data Selection"),
                       choices = dataChoices,
                       selected = dataChoices),
           DT::dataTableOutput("table")
           ),
  tabPanel(title = "Other")
)
)



server <- function(input, output){
  output$myText <- renderText({input$countries})
  cvec <- renderPrint({input$countries})
  observeEvent(input$run, {
     data1 <- unlist(strsplit(cvec(), split=" "))
     Pathways()
     output$data <- renderPlot({thermo()})
  })
  output$cvec <- renderPrint({input$countries})
  observeEvent(input$data, {
     if(input$data == "Country Data"){
        output$table = DT::renderDataTable({
          country_reduct
    })
    }
    if(input$data == "Operator Data"){
        output$table = DT::renderDataTable({
          operator_reduct
      })
    }})
}

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 我不明白。 input$countries 是向量,不是吗?

标签: r shiny


【解决方案1】:

我从您的帖子中无法理解太多,但据我所知,您需要在函数中使用input$countries。这可能会解决您的问题,但不确定:

observeEvent(input$run, {
     req(input$countries)
     data1 <- unlist(strsplit(input$countries, split=" "))
     Pathways()
     output$data <- renderPlot({thermo()})
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    相关资源
    最近更新 更多