Использование реактивной переменной внутри глагола dplyr с объединением

#r #shiny #dplyr #pool

#r #блестящий #dplyr #Бассейн

Вопрос:

У меня есть некоторые входные данные, и привязка реактивного значения к ним обновляется, когда пользователь нажимает кнопку действия. Я использую dplyr with pool для извлечения данных из внешней базы данных.

Ниже приведен мой working код для обновления реактивного фрейма данных:

   date_from <- eventReactive(input$btn_update, {
    return(format(input$date_time[1], "%Y-%m-%d"))
  })

  date_to <- eventReactive(input$btn_update, {
    return(format(input$date_time[2], "%Y-%m-%d"))
  })

  daily_active_users <- eventReactive(input$btn_update, {
    from <- date_from()
    to <- date_to()
    return(collect(
      src_pool(pool_instance) %>% tbl("daily_active_user") %>%
        filter(time >= from, time <= to) %>%
        arrange(time) %>%
        mutate(net_change = dau - lag(dau)) %>%
        mutate(net_change = if_else(is.na(net_change), 0, net_change))
    ))
  })
  

Поскольку у меня много реактивных фреймов данных, зависящих от date_from и date_to, я хочу добиться чего-то вроде (чтобы уменьшить дублирование кода):

   daily_active_users <- eventReactive(input$btn_update, {
    return(collect(
      src_pool(pool_instance) %>% tbl("daily_active_user") %>%
        filter(time >= date_from(), time <= date_to()) %>%
        arrange(time) %>%
        mutate(net_change = dau - lag(dau)) %>%
        mutate(net_change = if_else(is.na(net_change), 0, net_change))
    ))
  })
  

Но при запуске возникает ошибка, подобная:


RS-DBI driver: (could not Retrieve the result : ERROR: function date_from() does not exist
LINE 6: WHERE (("time" >= DATE_FROM()) AND ("time" <= DATE_TO()))) "...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
)
Есть ли лучшее решение для моего случая?

С уважением.

Комментарии:

1. Какую СУБД вы используете? dplyr похоже, он обрабатывается date_from() как встроенная функция и передает ее вместе с оценкой. В большинстве случаев это имеет смысл. Вам действительно лучше придерживаться приведенного выше блока кода, который устраняет эту двусмысленность. Вы могли бы использовать версию стандартной оценки filter_() для принудительной оценки, но это будет не очень красиво.

2. Я использую PostgreSQL в качестве серверной базы данных. Изменение filter на filter_ , а также изменение имени реактивной переменной на date_begin , а date_end также возникновение ошибки: comparison (5) is possible only for atomic and list types на самом деле у меня много реактивных фреймов данных, поэтому дублированный код может быть проблемой.