【问题标题】:select field based on checkBoxGroupInput()基于 checkBoxGroupInput() 选择字段
【发布时间】: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()),但出现类似错误。

【问题讨论】:

    标签: r ggplot2 shiny


    【解决方案1】:

    由于 OP 未提供工作代码,因此难以重现。此错误Warning: Error in if: argument is of length zero 通常意味着您的输入中有NULL 值。尝试将其包裹在if(!is.null(input$yourid)) {...}

    尝试用 -- 调试

    observe({
      print(input$yourid)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2020-10-07
      • 2011-08-05
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多