#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
на самом деле у меня много реактивных фреймов данных, поэтому дублированный код может быть проблемой.