rstudio / shiny

Easy interactive web applications with R
http://shiny.rstudio.com
Other
5.31k stars 1.87k forks source link

req() not silent inside functions #3672

Open mmuurr opened 1 year ago

mmuurr commented 1 year ago

This is a pretty contrived reprex, but the moral of the story is I'd expect text_1 and text_2 to be identical in the app below. They are identical until one clears the numeric input, which then sends Shiny NULL as the reactive val:

library(tidyverse)
library(shiny)

ui <- fluidPage(
  numericInput("row_ix", label = "row ix", value = 1),
  tags$h4("msg 1"), verbatimTextOutput("text_1"),
  tags$h4("msg 2"), verbatimTextOutput("text_2"),
)

server <- function(input, output, session) {

  ## renders the error message:
  output$text_1 <- renderPrint({
    mtcars %>% slice(req(input$row_ix))
  })

  ## swallows the error message:
  output$text_2 <- renderPrint({
    row_ix <- req(input$row_ix)
    mtcars %>% slice(row_ix)
  })

}

shinyApp(ui, server)

When input$row_ix is NULL, text_1 displays the error (unexpected) while text_2 silently swallows the error and displays nothing (expected).

(I briefly thought this could be due to magrittr's lazy evaluation, so I also tried with the new(ish) %!>% operator, but found the same behavior.)

Session Info
─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.0.3 (2020-10-10)
 os       macOS Big Sur 10.16
 system   x86_64, darwin19.6.0
 ui       unknown
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Denver
 date     2022-07-14
 pandoc   2.11.3.2 @ /usr/local/bin/pandoc

─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 ! package     * version date (UTC) lib source
 P assertthat    0.2.1   2019-03-21 [?] CRAN (R 4.0.3)
 P backports     1.2.1   2020-12-09 [?] CRAN (R 4.0.3)
 P broom         0.7.12  2022-01-28 [?] CRAN (R 4.0.3)
 P cachem        1.0.6   2021-08-19 [?] CRAN (R 4.0.3)
 P callr         3.7.1   2022-07-13 [?] CRAN (R 4.0.3)
 P cellranger    1.1.0   2016-07-27 [?] CRAN (R 4.0.3)
 P cli           3.2.0   2022-02-14 [?] CRAN (R 4.0.3)
 P colorspace    2.0-0   2020-11-11 [?] CRAN (R 4.0.3)
 P crayon        1.3.4   2017-09-16 [?] CRAN (R 4.0.3)
 P DBI           1.1.0   2019-12-15 [?] CRAN (R 4.0.3)
 P dbplyr        2.0.0   2020-11-03 [?] CRAN (R 4.0.3)
 P devtools      2.4.3   2021-11-30 [?] CRAN (R 4.0.3)
 P digest        0.6.27  2020-10-24 [?] CRAN (R 4.0.3)
 P dplyr       * 1.0.8   2022-02-08 [?] CRAN (R 4.0.3)
 P ellipsis      0.3.2   2021-04-29 [?] CRAN (R 4.0.3)
 P fansi         0.4.1   2020-01-08 [?] CRAN (R 4.0.3)
 P fastmap       1.1.0   2021-01-25 [?] CRAN (R 4.0.3)
 P forcats     * 0.5.0   2020-03-01 [?] CRAN (R 4.0.3)
 P fs            1.5.0   2020-07-31 [?] CRAN (R 4.0.3)
 P generics      0.1.2   2022-01-31 [?] CRAN (R 4.0.3)
 P ggplot2     * 3.3.5   2021-06-25 [?] CRAN (R 4.0.3)
 P glue          1.6.2   2022-02-24 [?] CRAN (R 4.0.3)
 P gtable        0.3.0   2019-03-25 [?] CRAN (R 4.0.3)
 P haven         2.3.1   2020-06-01 [?] CRAN (R 4.0.3)
 P hms           0.5.3   2020-01-08 [?] CRAN (R 4.0.3)
 P htmltools     0.5.2   2021-08-25 [?] CRAN (R 4.0.3)
 P httpuv        1.5.4   2020-06-06 [?] CRAN (R 4.0.3)
 P httr          1.4.2   2020-07-20 [?] CRAN (R 4.0.3)
 P jsonlite      1.7.2   2020-12-09 [?] CRAN (R 4.0.3)
 P later         1.3.0   2021-08-18 [?] CRAN (R 4.0.3)
 P lifecycle     1.0.1   2021-09-24 [?] CRAN (R 4.0.3)
 P lubridate     1.7.10  2021-02-26 [?] CRAN (R 4.0.3)
 P magrittr      2.0.3   2022-03-30 [?] CRAN (R 4.0.3)
 P memoise       2.0.1   2021-11-26 [?] CRAN (R 4.0.3)
 P mime          0.9     2020-02-04 [?] CRAN (R 4.0.3)
 P modelr        0.1.8   2020-05-19 [?] CRAN (R 4.0.3)
 P munsell       0.5.0   2018-06-12 [?] CRAN (R 4.0.3)
 P pillar        1.7.0   2022-02-01 [?] CRAN (R 4.0.3)
 P pkgbuild      1.2.0   2020-12-15 [?] CRAN (R 4.0.3)
 P pkgconfig     2.0.3   2019-09-22 [?] CRAN (R 4.0.3)
 P pkgload       1.3.0   2022-06-27 [?] CRAN (R 4.0.3)
 P prettyunits   1.1.1   2020-01-24 [?] CRAN (R 4.0.3)
 P processx      3.7.0   2022-07-07 [?] CRAN (R 4.0.3)
 P promises      1.2.0.1 2021-02-11 [?] CRAN (R 4.0.3)
 P ps            1.5.0   2020-12-05 [?] CRAN (R 4.0.3)
 P purrr       * 0.3.4   2020-04-17 [?] CRAN (R 4.0.3)
 P R6            2.5.0   2020-10-28 [?] CRAN (R 4.0.3)
 P Rcpp          1.0.9   2022-07-08 [?] CRAN (R 4.0.3)
 P readr       * 1.4.0   2020-10-05 [?] CRAN (R 4.0.3)
 P readxl        1.3.1   2019-03-13 [?] CRAN (R 4.0.3)
 P remotes       2.4.2   2021-11-30 [?] CRAN (R 4.0.3)
   renv          0.13.2  2021-03-30 [1] CRAN (R 4.0.3)
 P reprex        0.3.0   2019-05-16 [?] CRAN (R 4.0.3)
 P rlang         1.0.4   2022-07-12 [?] CRAN (R 4.0.3)
 P rstudioapi    0.13    2020-11-12 [?] CRAN (R 4.0.3)
 P rvest         0.3.6   2020-07-25 [?] CRAN (R 4.0.3)
 P scales        1.1.1   2020-05-11 [?] CRAN (R 4.0.3)
 P sessioninfo   1.2.2   2021-12-06 [?] CRAN (R 4.0.3)
 P shiny       * 1.7.1   2021-10-02 [?] CRAN (R 4.0.3)
 P stringi       1.5.3   2020-09-09 [?] CRAN (R 4.0.3)
 P stringr     * 1.4.0   2019-02-10 [?] CRAN (R 4.0.3)
 P tibble      * 3.1.6   2021-11-07 [?] CRAN (R 4.0.3)
 P tidyr       * 1.2.0   2022-02-01 [?] CRAN (R 4.0.3)
 P tidyselect    1.1.2   2022-02-21 [?] CRAN (R 4.0.3)
 P tidyverse   * 1.3.0   2019-11-21 [?] CRAN (R 4.0.3)
 P usethis       2.1.6   2022-05-25 [?] CRAN (R 4.0.3)
 P utf8          1.1.4   2018-05-24 [?] CRAN (R 4.0.3)
 P vctrs         0.3.8   2021-04-29 [?] CRAN (R 4.0.3)
 P withr         2.5.0   2022-03-03 [?] CRAN (R 4.0.3)
 P xml2          1.3.2   2020-04-23 [?] CRAN (R 4.0.3)
 P xtable        1.8-4   2019-04-21 [?] CRAN (R 4.0.3)
mmuurr commented 1 year ago

UPDATE: I realized this isn't specific to magrittr or pipelines; here's a third output that also displays the err (when input$row_ix is NULL):

  output$text_3 <- renderPrint({
    slice(mtcars, req(input$row_ix))
  })