2017-04-12 41 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