【发布时间】:2021-11-23 20:23:43
【问题描述】:
我有一个复选框组输入:
checkboxGroupInput('siteconvs', 'Site conversions based on ...',
choices = c(
'Trials' = 'Site Conversion Rate solo Trials',
'D2P' = 'Site Conversion Rate solo D2P'
), selected = c('Trials', 'D2P'),
inline = T, width = NULL, choiceNames = NULL, choiceValues = NULL
)
另外,我有一个数据框:
summary_data %>% glimpse
Rows: 30
Columns: 12
$ date <date> 2021-09-01, 2021-09-02, 2021-09-03, 2021-09-04, 2021-09-05, 2021-09-06, 2021-09-07, 2021-09-08,…
$ Sessions <int> 3534, 3362, 3154, 2569, 2718, 3044, 3453, 3310, 3548, 3128, 2892, 3553, 3894, 3652, 3399, 3344, …
$ `Trial Sign Ups` <int> 86, 69, 76, 77, 66, 103, 93, 102, 137, 119, 116, 147, 146, 165, 133, 96, 45, 52, 46, 71, 85, 82,…
$ `Direct to Paid` <int> 4, 8, 2, 1, 1, 5, 3, 6, 5, 8, 4, 6, 11, 1, 3, 7, 8, 8, 13, 6, 8, 10, 11, 7, 12, 8, 14, 10, 19, 11
$ `Total Site Conversions` <dbl> 90, 77, 78, 78, 67, 108, 96, 108, 142, 127, 120, 153, 157, 166, 136, 103, 53, 60, 59, 77, 93, 92…
$ `Expired Trials` <int> 81, 66, 69, 74, 61, 96, 81, 94, 122, 92, 105, 113, 98, 138, 100, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ `Trial to Paid` <int> 7, 5, 7, 4, 7, 5, 4, 7, 6, 5, 4, 4, 7, 9, 5, 3, 1, 3, 4, 2, 8, 2, 0, 5, 1, 6, 3, 4, 4, 4
$ `Trial to Paid (End Date Passed)` <int> 5, 4, 4, 3, 6, 4, 2, 5, 1, 0, 2, 1, 1, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
$ `Site Conversion Rate` <dbl> 0.02546689, 0.02290303, 0.02473050, 0.03036201, 0.02465048, 0.03547963, 0.02780191, 0.03262840, …
$ `Trial to Paid Conversion Rate` <dbl> 0.08139535, 0.07246377, 0.09210526, 0.05194805, 0.10606061, 0.04854369, 0.04301075, 0.06862745, …
$ `Site Conversion Rate solo D2P` <dbl> 0.0011318619, 0.0023795360, 0.0006341154, 0.0003892565, 0.0003679176, 0.0016425756, 0.0008688097…
$ `Site Conversion Rate solo Trials` <dbl> 0.02433503, 0.02052350, 0.02409639, 0.02997275, 0.02428256, 0.03383706, 0.02693310, 0.03081571, …
根据用户的复选框选择,我想相应地 ggplot:
第一个变量告诉我在 geom_line 中使用哪个指标,基于
trend_metric <- reactive({
if(input$siteconvs == 'Site Conversion Rate solo Trials') {
'Site Conversion Rate solo Trials'
} else if (input$siteconvs == 'Site Conversion Rate solo D2P') {
'Site Conversion Rate solo D2P'
} else {
'Trial to Paid Conversion Rate'
}
})
在英语中,如果他们为试验或仅 d2p 选择一个或另一个复选框,则相应的字符串是“Site Conversion Rate solo Trials”或“Site Conversion Rate solo D2P”,否则,假设他们都选择了或没有选择,在这种情况下使用“试用到付费转换率”。
我尝试基于此进行 ggplot:
output$trend_plot <- renderPlot(
if(! 'Sessions' %in% names(summary_data())) {
ggplot()
} else {
summary_data() %>%
ggplot(aes(date, Sessions)) +
geom_col(fill = '#39cccc', na.rm = T) +
geom_line(aes(y = .data[[trend_metric()]] * max_sess()), color = 'tomato', na.rm = T, size = 1) +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank())
})
当我运行它时,我得到控制台错误:
Warning: Error in if: argument is of length zero 0s
133: <reactive:trend_metric> [/home/rstudio/Volume/Projects/analytics-nz-marketing-dashboard/app.R#340]
117: trend_metric
115: <reactive:rawd> [/home/rstudio/Volume/Projects/analytics-nz-marketing-dashboard/app.R#147]
99: rawd
96: renderUI [/home/rstudio/Volume/Projects/analytics-nz-marketing-dashboard/app.R#177]
95: func
82: renderFunc
81: output$evg_device
1: runApp
Warning: Error in if: argument is of length zero
101: <Anonymous>
如果我将 ggplot 编辑为 geom_line 中 y 的硬编码值,例如
geom_line(aes(y = Site Conversion Rate solo Trials...
然后它工作并且情节呈现。但如果我尝试根据复选框输入使其动态化,则不会。
我如何告诉 ggplot 在 geom_line 中使用 Site Conversion Rate solo Trials 中的 y 在仅选择试验复选框的情况下,Site Conversion Rate solo D2P 在仅选择 D2P 的情况下,否则 Trial to Paid Conversion Rate 作为默认值,如果多个还是没有选中复选框?
也尝试过!! sym(trend_metric()),但出现类似错误。
【问题讨论】: