Реактивная передача функций в tsibble index_by

У меня проблемы с реактивной передачей date-time функций сворачивания в index_by функцию из пакета tsibble.

index_by принимает в качестве аргумента time function (например, week() или month() из lubridate) и соответственно сворачивает данные.

Я хочу, чтобы сворачивание было реактивным на ввод пользователя (в частности, выбранный диапазон данных).

Пример: если выбрано date-range > 60, свернуть с помощью week(), если выбрано date-range > 120, свернуть с помощью month().

РЕДАКТИРОВАТЬ: я специально говорю об использовании tsibble в контексте серверной части блестящего модуля для построения графика. Пример:

mod_plot = function(input, output, session, df, date_Range){
  output$plot = renderPlotly({
    df() %>%
      index_by(collapse_time = week(.)/month(.)) %>%
      summarise(trace1 = sum(trace1))%>%
      plot_ly(type = 'bar', x = ~collapse_time, y = ~trace1)
  })
}

Во избежание дублирования кода было бы неплохо как-то передать функции сворачивания даты в index_by. Пример использования tibbletime:

  mod_plot = function(input, output, session, df, date_Range){
      output$plot = renderPlotly({
      #create reactive variable collapse_time based on selected time range
      collapse_time = renderText(if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) <= 60){"daily"}
                               else if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) < 120){"weekly"}
                               else{"monthly"})
        df() %>%
          collapse_by(collapse_time ) %>%
          group_by(date) %>%
          summarise(trace1 = sum(trace1))%>%
          plot_ly(type = 'bar', x = ~date, y = ~trace1)
      })
    }

Это обеспечивает лаконичный и понятный конвейер.


person ayasugihada    schedule 12.08.2019    source источник
comment
Я бы, наверное, разделил тиббл на два для date-range > 60 и date-range > 120 соответственно. Нет смысла складывать week() и month() в один тсиббл.   -  person Earo Wang    schedule 13.08.2019
comment
Привет, Эро. (примечание: спасибо за отличный пакет!). Надо было упомянуть, что все дело в использовании tsibble внутри реактивного блестящего приложения. Это часть модуля для построения гистограмм. Больше информации в отредактированном посте.   -  person ayasugihada    schedule 13.08.2019


Ответы (1)


Эта настраиваемая функция возвращает желаемую функцию сворачивания на основе выбранного диапазона дат.

get_fct =
      function(x){
        if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] <= 60){
            ymd
        }
        else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] < 120){
            yearweek
        }
        else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] >= 120){
            yearmonth}
      }


  collapsing_function = get_fct(x = as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]))
person ayasugihada    schedule 18.10.2019