2017-04-12 1 views
0

저는 R이 새롭고 반짝입니다. 날짜 범위 입력의 수에 따라 다릅니다. 각 날짜 범위 입력의 시작 날짜와 종료 날짜를 가져 와서 목록에 저장하고 싶습니다. 2010-12-31while 루프에 여러 dateRangeInput이 사용되었습니다.

트렌드 날짜 범위 2 - 2010-01-01 : 2011-01-01 - 2011-12-31

트렌드 날짜 범위 1 : 예를 들어

TrendView를 실행하면 표시됩니다. 이것이 내가 원하는 결과물입니다.

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

[2] 2011-01 2011-12

I 여전히 사이 계산할

그 두 날짜.

저는 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과 빛나는 것에 대해 많은 것을 배웠습니다. 이것이 제가 찾고있는 것입니다. 이제 반응적이고 EventRactive를 배워야합니다. 좋은 하루 보내세요! 건배 – aotearoa

관련 문제