2017-04-12 39 views
0

我是R中的新人,並且很有光澤。取決於日期範圍輸入的數量。我想獲取每個日期範圍輸入的開始日期和結束日期,並將其存儲在列表中。用於for while循環的多個dateRangeInput

例如:

趨勢日期範圍1: 2010-01-01 - 2010-12-31

趨勢日期範圍2: 2011-01-01 - 2011-12-31

所以當我運行Trend.List它會顯示。這是我想要達到的輸出。

Trend.List [[1]] 2010-01 2010-12

[[2]] 2011-01 2011-12

我仍然想之間計算那兩個日期。

我不知道如何在R和閃亮的最佳代碼,因爲我是新手。

感謝您的幫助!

見代碼

ui <-fluidPage(
       numericInput("numoftrends", 
       label="Number of Linear Trends:", 
       min=0, 
       max=10, 
       value=0, 
       step=1), 
    conditionalPanel(condition="input.numoftrends > 0", 
        uiOutput("num_of_trends") 
        ), 
    actionButton("submit", "Submit") 
) 

server <- function(input, output, session) { 

    output$num_of_trends <- renderUI({ 

    lapply(1:input$numoftrends, function(i) { 

    tagList(dateRangeInput('DateRange(i)', 
          label = paste('Trend Date Range Input', i, ':'), 
          separator = " - ", 
          format = "yyyy-mm", 
          startview = 'year' 
      ) 

    }) 

}) 

observeEvent(input$submit, { 
    Trend.list <- list() 
    for (a in 1:input$numoftrends) { 
    start.date <- input$DateRange[a][1] 
    end.date <- input$DateRange[a][2] 

    diff <- end.date - start.date 

    Trend.list[[a]] <- input$DateRange[a] 
    } 

    Trend.list 

}) 

} 

shinyApp(ui= ui, server = server) 
+0

你能提供無差錯的代碼?當我運行此代碼時,當應用程序啓動時出現錯誤。我也沒有看到數據文件'SBI' – krish

+0

我很抱歉,但這段代碼不是無錯的,因爲它仍然是一項工作進行中。我可以爲您提供更簡單的代碼嗎?如果有幫助。感謝您關注此事。請讓我知道是否可以在此評論中發送代碼。 – aotearoa

+0

任何有助於重現問題並進行研究的內容。您可以使用新代碼編輯問題 – krish

回答

1

你讓他們有不同的標籤,但它們的輸入對象是相同的(全名爲'DateRange(i)')。您需要更改兩者以便能夠引用它們。

觀察員也是在這裏使用的不正確的方法,您應該使用reactive,如下所示。如果確實需要提交按鈕停止處理,請使用eventReactive生成數據。

此外,使條件面板依賴於趨勢的數量可能不是最好的方式 - 我建議使用複選框。

library("shiny") 

ui <-fluidPage(
    checkboxInput("add_trend", "Add Trend(s)"), 
    conditionalPanel(condition="input.add_trend === true", 
        numericInput("numoftrends", 
           label="Number of Linear Trends:", 
           min = 1, 
           max = 10, 
           value = 1, 
           step = 1), 
        uiOutput("num_of_trends"), 
        textOutput("see_ranges") 
), 
    actionButton("submit", "Submit") 
) 

server <- function(input, output, session) { 

    output$num_of_trends <- renderUI({ 
    lapply(1:input$numoftrends, function(i) { 
     dateRangeInput(paste0("date_range_input", i), paste('Trend Date Range Input', i, ':'), 
        separator = " - ", 
        format = "yyyy-mm", 
        startview = 'year') 
    }) 
    }) 

    trend_list <- reactive({ 
    out <- list() 
    for(i in 1:input$numoftrends) { 
     out[[i]] <- input[[paste0("date_range_input", i)]] 
    } 
    out 
    }) 

    output$see_ranges <- renderPrint({ 
    print(trend_list()) 
    }) 
} 

shinyApp(ui = ui, server = server) 

enter image description here

+0

你好,你好。感謝您花時間研究這一點。我一直從你身上學到很多R和閃亮的東西。這是我正在尋找的。現在我必須學習反應性和EventReactive。你有很好的一天!乾杯 – aotearoa