2015-10-06 4 views
2

Я использую «блестящий» в RStudio.R: Shiny - update dateRangeInput начало и конец

Я хочу, чтобы выбранные даты виджета dateRangeInput обновлялись с минимальным и максимальным набором данных.
Когда я пробую код ниже (упрощенный только для даты начала), дата начала не отображается в левом поле виджета диапазона дат: вместо этого поле отображается пустым (но на самом деле оно установлено как сегодняшняя дата - при нажатии на пустое поле появляется календарь с сегодняшней датой).
ui.r: dateRangeInput ("даты", метка = "Диапазон дат", запуск "mydatestart =, конец = '2014-05-06')

Минимальная дата фактически выбран, так как он показывает при использовании до
ui.r: textOutput ('mydatestart')

Вот воспроизводимым пример:
ui.R

 
library(shiny) 

shinyUI({ 
    sidebarPanel(
    dateRangeInput("dates", label = "Date range", start='mydatestart', end = '2014-05-06'), 
    textOutput('mydatestart') 
) 
})

server.R


shinyServer(function(input, output) { 
    mydate<-c("2013-04-24", "2013-04-25", "2013-04-26", "2013-04-27", "2013-04-28", "2013-04-28", "2013-04-29", "2013-04-30") 
    output$mydatestart<-renderText(min(mydate)) 
})

Использование выходной $ mydatestart < -renderText (as.Date (мин (MyDate))) дает один и тот же вопрос.

Вы знаете, почему это происходит?
Спасибо, Yvan

ответ

1

Вы можете поместить ваш dateRangeInput в server.R так что вы можете использовать любой объект, определенный там в качестве аргументов:

library(shiny) 

ui <- shinyUI({ 
    sidebarPanel(
     htmlOutput("selector"), 
     textOutput('mydatestart') 
    ) 
}) 

server <- shinyServer(function(input, output) { 
    mydate<-c("2013-04-24", "2013-04-25", "2013-04-26", "2013-04-27", "2013-04-28", "2013-04-28", "2013-04-29", "2013-04-30") 
    output$mydatestart<-renderText({min(mydate)}) 

    output$selector <- renderUI({ 

     dateRangeInput("dates", label = "Date range" 
         , start=min(mydate), end = '2014-05-06') 

    }) 

}) 

shinyApp(ui = ui, server = server) 
3
  1. Вы не можете передать строку литерала как mydatestart в качестве аргумента dateRangeInput, потому что он будет интерпретировать как только что - строка - вот почему start поле было пусто. Вы должны дать ему законную ценность.
  2. В вашем shinyUI было указано несколько ключевых функций, указанных ниже.
  3. Немного более идиоматично помещать глобальные объекты данных в файл global.R для ваших блестящих приложений, а не определять их внутри функции shinyServer.

ui.R

library(shiny) 

shinyUI({ 
    ## fluidPage(...) 
    fluidPage(
    ## sidebarLayout(...) 
    sidebarLayout(
     sidebarPanel(
     dateRangeInput(
      "dates", label = "Date range", 
      start = min(mydate), 
      end = '2014-05-06'), 
     uiOutput("mydatestart2") 
    ), 

     mainPanel(textOutput('mydatestart')) 
    ) 
) 

}) 

server.R

library(shiny) 

shinyServer(function(input, output) { 
    # not accessable in UI 
    output$mydatestart <- renderText(min(mydate)) 
    # accessable in UI 
    output$mydatestart2 <- renderUI({ 
    dateRangeInput(
     "dates2", 
     label = "Reactive Start Date", 
     start = as.Date(input$dates[1]) + 7, 
     end = as.Date(input$dates[1]) + 14 
    ) 
    }) 
}) 

глобальный.R

mydate <- c("2013-04-24", "2013-04-25", "2013-04-26", 
      "2013-04-27", "2013-04-28", "2013-04-28", 
      "2013-04-29", "2013-04-30") 

enter image description here


enter image description here

+0

Спасибо за ваш быстрый ответ. Это действительно работает в этом примере. Однако как бы вы получили тот же результат, используя * output * object (например, * mydatestart * в примере) на сервере.R? Я хочу использовать этот виджет как часть более крупного блестящего приложения, в котором пользователь загружает набор данных. Тогда виджет dateRangeInput должен будет получить минимальные и максимальные даты из загруженного набора данных. Вы рекомендуете использовать renderUI() в server.R вместо этого? – YGS

+0

@YGS Конечно, см. Мой обновленный ответ. – nrussell

+0

Я не могу пометить его как таковой, но ваш скрипт также является хорошим ответом, используя * uiOutput() * в ui.R - вместо * htmlOutput() * в @ Andriy_T's – YGS

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