代码之家  ›  专栏  ›  技术社区  ›  Harry Daniels

在Shining中使用服务器输出作为输入参数

  •  1
  • Harry Daniels  · 技术社区  · 7 年前

    它包括一个名为choice的全局列表,该列表有三个元素:日期。1,日期。2和日期。3(每个都是不同的日期序列)。

    一个选择输入,允许用户选择我们的全局选择之一。

    服务器函数从一个反应式表达式开始,该表达式创建了我们选择的向量。然后有两个文本输出,用于提取我们选择的最小和最大日期值。

    我要做的是使用start。日期和结束。日期输出,用于填充ui中日期输入的值参数,因此根据您选择的选项,日期输入的起点将发生变化。

    library(shiny)
    
    start.date1 <- as.Date("2017-01-01","%Y-%m-%d")
    end.date1 <- as.Date("2017-01-31","%Y-%m-%d")
    start.date2 <- as.Date("2017-02-01","%Y-%m-%d")
    end.date2 <- as.Date("2017-02-28","%Y-%m-%d")
    start.date3 <- as.Date("2017-03-01","%Y-%m-%d")
    end.date3 <- as.Date("2017-03-31","%Y-%m-%d")
    
    choice <- list()
    choice$date.1 <- as.character(seq(start.date1,end.date1,by="week"))
    choice$date.2 <- as.character(seq(start.date2,end.date2,by="week"))
    choice$date.3 <- as.character(seq(start.date3,end.date3,by="week"))
    
    ui <- fluidPage(
      selectInput("select.scenario","select.scenario", choices = names(choice)),
      dateInput("start.date","start.date",value = textOutput("start.date")),
      dateInput("end.date","end.date",value = textOutput("end.date"))
    )
    
    server <- function(input, output) {
    
      dates <- eventReactive(input$select.scenario,{
        df <- choice[[as.character(input$select.scenario)]]
        })
    
      output$start.date <- renderText({
        df <- dates()
        start.date <- min(as.Date((df)))
        start.date
      })
    
      output$end.date <- renderText({
        df <- dates()
        end.date <- max(as.Date((df)))
        end.date
      })
    
      }
    
    shinyApp(ui = ui, server = server)
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Christoph Wolk    7 年前

    你不能 output 进入 ui 释义任一使用 uiOutput ,或使用 update 功能:

    library(shiny)
    
    start.date1 <- as.Date("2017-01-01","%Y-%m-%d")
    end.date1 <- as.Date("2017-01-31","%Y-%m-%d")
    start.date2 <- as.Date("2017-02-01","%Y-%m-%d")
    end.date2 <- as.Date("2017-02-28","%Y-%m-%d")
    start.date3 <- as.Date("2017-03-01","%Y-%m-%d")
    end.date3 <- as.Date("2017-03-31","%Y-%m-%d")
    
    choice <- list()
    choice$date.1 <- as.character(seq(start.date1,end.date1,by="week"))
    choice$date.2 <- as.character(seq(start.date2,end.date2,by="week"))
    choice$date.3 <- as.character(seq(start.date3,end.date3,by="week"))
    
    ui <- fluidPage(
      selectInput("select.scenario","select.scenario", choices = names(choice)),
      dateInput("start.date","start.date"),
      dateInput("end.date","end.date")
    )
    
    server <- function(session, input, output) {
    
      dates <- eventReactive(input$select.scenario,{
        df <- choice[[as.character(input$select.scenario)]]
      })
    
      observeEvent(input$select.scenario, {
        updateDateInput(session, "start.date", value=min(as.Date(dates())))
        updateDateInput(session, "end.date", value=max(as.Date(dates())))
      })
    
    }
    
    shinyApp(ui = ui, server = server)