2015-12-11 31 views
2

我的問題涉及具有高度可變日期範圍的數據集。我希望允許用戶選擇一個人或事件,然後將dateRangeInput中的默認顯示日期範圍作爲這些日期的最小值和最大值。我希望從這些日期範圍創建的初始圖形受限於數據集該行內的最小值和最大值,這很容易。不過,我還需要用戶有能力隨意更改這些以擴大範圍或縮小範圍。爲了舉例的目的,我創建了一個基本的代碼/數據示例來顯示我的困難。我尋找其他答案,但我的搜索已被證明不成功。我從r幫助文件和 http://shiny.rstudio.com/tutorial/lesson4/ 以及本網站上的許多其他問題,但都無濟於事。R有光澤的反應性默認日期範圍

ui.R

shinyUI(fluidPage(
    titlePanel("Default Date Range"), 

    sidebarLayout(
    sidebarPanel(
     helpText("Problem initiating a date range default based on selected input"), 

    selectInput("var", 
       label = "Choose a variable to display", 
       choices = c("White", "Red", "Blue"), 
       selected = "White"), 


    dateRangeInput('dateRange2', 
       label = paste('Date range selection'), 
       start = textOutput("text1"), 
       end = Sys.Date(), 
       separator = " - ", 
       weekstart = 1 
) 
), 

mainPanel(
    textOutput("text1"), 
    textOutput("text2") 
) #end of main panel 
)#end of SidebarLayout 
))#end of fluid page and UI 

而對於server.r文件

server.R

my.data <- t(data.frame(White = c(as.Date("2010-01-01"), as.Date(Sys.Date())), 
        Red = c(as.Date("1943-01-01"), as.Date("1960-05-19")), 
        Blue = c(as.Date("1975-01-01"), as.Date("2010-03-09")))) 


shinyServer(function(input, output){ 

output$text1 <- renderText({ 
    paste("You have selected", input$var) 
}) 



output$text2 <- renderText({ 
    my.row = match(input$var, rownames(my.data)) 
paste("You need the default date range", 
     my.data[my.row,1], "to", my.data[my.row,2]) 
    }) 

}) 
+0

我不知道我理解正確,但是當你使用min = Sys.Date() - 10,最大= Sys.Date()+ 10你是使用今天的日期減去10天。在你的my.data數據集中,最早的日期是1943-01-01。謹慎解釋一下好一點? – MLavoie

+0

我從一個大的ui.r文件複製了這個文件,並在那裏複製了錯誤的行。我的道歉,但我的希望是,當有人選擇「白色」檢查dateRangeInput的自動填充默認值將從2010年1月1日到今天。但是如果他們選擇紅色,dateRangeInput默認將從1943年到1960年。 – farmkid

回答

1

這個怎麼樣。改變你的selectInput,你會看到日期範圍將相應的顏色。

server.R 
library(shiny) 

my.data <- as.data.frame(t(data.frame(White = c(as.Date("2010-01-01"), as.Date(Sys.Date())), 
         Red = c(as.Date("1943-01-01"), as.Date("1960-05-19")), 
         Blue = c(as.Date("1975-01-01"), as.Date("2010-03-09"))))) 

my.data$V1 <- as.Date(my.data$V1) 
my.data$V2 <- as.Date(my.data$V2) 

shinyServer(function(input, output){ 


    output$inVar2 <- renderUI({ 

    my.row = match(input$var, rownames(my.data)) 

    dateRangeInput("inVar2", 
        label = paste('Date range selection'), 
        start = my.data[my.row,1], 
        end = my.data[my.row,2], 
        separator = " - ", 
        weekstart = 1 

        ) 

    }) 


    output$text1 <- renderText({ 
    paste("You have selected", input$var) 
    }) 



    output$text2 <- renderText({ 
    my.row = match(input$var, rownames(my.data)) 
    paste("You need the default date range", 
      my.data[my.row,1], "to", my.data[my.row,2]) 
    }) 

}) 

和ui.R

ui.R 
library(shiny) 

shinyUI(fluidPage(
    titlePanel("Default Date Range"), 

    sidebarLayout(
    sidebarPanel(
     helpText("Problem initiating a date range default based on selected input"), 

     selectInput("var", 
        label = "Choose a variable to display", 
        choices = c("White", "Red", "Blue"), 
        selected = "White"), 


     uiOutput("inVar2") 

    ), 

    mainPanel(
     textOutput("text1"), 
     textOutput("text2") 
    ) #end of main panel 
)#end of SidebarLayout 
))#end of fluid page and UI