rstudio / rstudio/pointblank

Knitting Rmd fails if chunk ends with non-printing code

Open
#422 0 comments 0 reactions 1 assignee View on GitHub

@rich-iannone is already working on this.

Since Jul 19, 2022.

Type: ☹︎ Bug
Dominant language
R
Stars
1k
Forks
59
Avg merge
25m
Merged PRs (30d)
4

Description

Prework

  • Read and agree to the code of conduct and contributing guidelines.
  • If there is already a relevant issue, whether open or closed, comment on the existing thread instead of posting a new issue.
  • Post a minimal reproducible example so the maintainer can troubleshoot the problems you identify. A reproducible example is:
    • Runnable: post enough R code and data so any onlooker can create the error on their own computer.
    • Minimal: reduce runtime wherever possible and remove complicated details that are irrelevant to the issue at hand.
    • Readable: format your code according to the tidyverse style guide.

Description

This took me a while to figure out why the first example of my own I tried didn't work, so perhaps it's useful to others (and maybe avoidable). If an Rmd chunk with validate = TRUE ends with a non-printing statement, the entire file fails to knit. A conceivable example of this would be a comment.

Reproducible example

Using the template Rmd and adding additional content that produces no printed output (e.g. assignment or a comment) at the end of the chunk, e.g.

```{r validation_step_functions, validate = TRUE}
col_exists(small_table, columns = vars(a, b, c, d, e, f))
rows_distinct(small_table, vars(d, e))
col_vals_gt(small_table, vars(d), 1000)
# this shouldn't matter
```

Less likely to occur, but not (as far as I could see) advised against:

```{r validation_step_functions, validate = TRUE}
col_exists(small_table, columns = vars(a, b, c, d, e, f))
rows_distinct(small_table, vars(d, e))
col_vals_gt(small_table, vars(d), 1000)
a <- 1
```

Non-printing statements elsewhere in the chunk appear to work fine.

Similarly for the (usually passing) piped example

```{r validate = TRUE}
small_table %>% 
  col_is_date("date") %>%
  col_vals_gt(vars(d), vars(c), na_pass = TRUE)
#
```

or

```{r validate = TRUE}
small_table %>% 
  col_is_date("date") %>%
  col_vals_gt(vars(d), vars(c), na_pass = TRUE) %>%
  invisible()
```

When ending with a non-printing statement, the file fails to knit with error:

Error in if (agent_tbl_vec[i]) { : missing value where TRUE/FALSE needed
Calls: <Anonymous> ... block_exec -> eng_r -> <Anonymous> -> remix_content
Execution halted

I can only guess, but perhaps something to do with extract_output().

I did note the advice

For best rendering results, don't place anything else inside the chunk

but I took that to mean it was optional - it appears it's essential that the final statement produces some output.

Statements on the final line that output something appear to be okay

```{r validation_step_functions, validate = TRUE}
col_exists(small_table, columns = vars(a, b, c, d, e, f))
rows_distinct(small_table, vars(d, e))
col_vals_gt(small_table, vars(d), 1000)
1
```

or with identity(1), 1+1, or (a <- 1), but not invisible(1) or stopifnot(TRUE).

Expected result

No errors should be produced, the file should knit as usual.

Session info

Click to expand
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.2.1 (2022-06-23)
##  os       macOS Monterey 12.4
##  system   aarch64, darwin20
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Australia/Adelaide
##  date     2022-07-19
##  pandoc   2.18 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version     date (UTC) lib source
##  assertthat    0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
##  backports     1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
##  base64enc     0.1-3       2015-07-28 [1] CRAN (R 4.2.0)
##  blastula      0.3.2       2020-05-19 [1] CRAN (R 4.2.0)
##  bslib         0.3.1       2021-10-06 [1] CRAN (R 4.2.0)
##  cachem        1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
##  callr         3.7.0       2021-04-20 [1] CRAN (R 4.2.0)
##  checkmate     2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
##  cli           3.3.0       2022-04-25 [1] CRAN (R 4.2.0)
##  colorspace    2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
##  commonmark    1.8.0       2022-03-09 [1] CRAN (R 4.2.0)
##  crayon        1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
##  DBI           1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
##  devtools      2.4.3       2021-11-30 [1] CRAN (R 4.2.0)
##  digest        0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
##  dplyr         1.0.9       2022-04-28 [1] CRAN (R 4.2.0)
##  ellipsis      0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
##  evaluate      0.15        2022-02-18 [1] CRAN (R 4.2.0)
##  fansi         1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
##  fastmap       1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
##  fs            1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
##  generics      0.1.2       2022-01-31 [1] CRAN (R 4.2.0)
##  ggplot2       3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
##  glue          1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
##  gt            0.6.0       2022-05-24 [1] CRAN (R 4.2.0)
##  gtable        0.3.0       2019-03-25 [1] CRAN (R 4.2.0)
##  htmltools     0.5.2       2021-08-25 [1] CRAN (R 4.2.0)
##  jquerylib     0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
##  jsonlite      1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
##  knitr         1.39        2022-04-26 [1] CRAN (R 4.2.0)
##  lifecycle     1.0.1       2021-09-24 [1] CRAN (R 4.2.0)
##  magrittr      2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
##  memoise       2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
##  munsell       0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
##  pillar        1.7.0       2022-02-01 [1] CRAN (R 4.2.0)
##  pkgbuild      1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
##  pkgconfig     2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
##  pkgload       1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
##  pointblank  * 0.11.0.9000 2022-07-19 [1] Github (rich-iannone/pointblank@7921da3)
##  prettyunits   1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
##  processx      3.6.1       2022-06-17 [1] CRAN (R 4.2.0)
##  ps            1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
##  purrr         0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
##  R6            2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
##  remotes       2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
##  rlang         1.0.3       2022-06-27 [1] CRAN (R 4.2.0)
##  rmarkdown     2.14        2022-04-25 [1] CRAN (R 4.2.0)
##  rstudioapi    0.13        2020-11-12 [1] CRAN (R 4.2.0)
##  sass          0.4.1       2022-03-23 [1] CRAN (R 4.2.0)
##  scales        1.2.0       2022-04-13 [1] CRAN (R 4.2.0)
##  sessioninfo   1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
##  stringi       1.7.6       2021-11-29 [1] CRAN (R 4.2.0)
##  stringr       1.4.0       2019-02-10 [1] CRAN (R 4.2.0)
##  tibble        3.1.7       2022-05-03 [1] CRAN (R 4.2.0)
##  tidyselect    1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
##  usethis       2.1.6       2022-05-25 [1] CRAN (R 4.2.0)
##  utf8          1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
##  vctrs         0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
##  xfun          0.31        2022-05-10 [1] CRAN (R 4.2.0)
##  yaml          2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
## 
##  [1] /Users/jonathan.carroll/Library/R/arm64/4.2/library
##  [2] /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.