--- title: "Troubleshoot" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Troubleshoot} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` Troubleshooting Quarto documents can be more challenging than debugging R scripts. The Quarto environment is different than the R interactive environment, making it more difficult to debug errors. Additionally, error messages are generally more informative in the interactive environment. Errors can occur from: - R code issues - Quarto document issues - Environment issues # What to do when the report fails to render? When a report fails to render, the Background Jobs tab of RStudio will likely open with an error message hinting where the issue occurred. Keep reading to get an idea of what R code, Quarto document, and environment issues look like and how to resolve them. If you're still stuck, see the guides for debugging and plugging error messages into search engines like Google linked in the [Get help] section. ## R code issues 1. Note where the error occurred and what the message was. If the error was from `purrr::map_chr()` in the [`create-measurement-group-sections` chunk], skip to that section in [Common errors]. This chunk cannot be run interactively and requires additional troubleshooting. 2. Restart R (`Cmd`/`Ctrl` + `Option`/`Shift` + `F10`). 3. Run each chunk interactively. If the issue is in the R code, this should recreate the problem so you can interactively debug. 4. Once the error is fixed and the chunk runs successfully, try rendering the report again. To demonstrate, add a typo in the data file name (`washi-dataa.csv` instead of `washi-data.csv`) and try rendering. 1. The Background Jobs pane of RStudio opened with an error message telling us the location and sequence of calls that led to the function that errored. Now we know rendering failed at lines 57-66 in the `load-data` chunk because of the `read.csv()` function. ``` r processing file: 01_producer-report.qmd 1/61 2/61 [setup] 3/61 4/61 [load-data] Quitting from lines 57-66 [load-data] (01_producer-report.qmd) Error in `file()`: ! cannot open the connection Backtrace: 1. utils::read.csv(...) 2. utils::read.table(...) 3. base::file(file, "rt") Execution halted ``` 2. Clear the environment by restarting the R session. 3. Run each chunk interactively. It stops at `load-data` with a more specific error message informing us that `washi-dataa.csv` doesn't exist in the `data` folder. Fix the typo by removing the extra `a`. ``` r > # Load lab results > data <- read.csv( + here::here("data/washi-dataa.csv"), + check.names = FALSE, + encoding = "UTF-8" + ) Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file 'C:/Users/jryan/Documents/R/projects/soils-demo/data/washi-dataa.csv': No such file or directory ``` 4. Rerun the chunk. If successful, try rendering the report. **Advanced tip:** with your cursor on the function name, press `F2` to peek inside the source code of that function. You can also access it through `Code` \> `Go to Function Definition`. This may help you debug any errors from {soils} functions, or any other package functions. See the [RStudio User Guide](https://docs.posit.co/ide/user/ide/guide/code/code-navigation.html#go-to-function-definition) for more details. ## Quarto document issues Quarto document issues tend to be in the YAML or chunk options. The troubleshooting steps are generally the same as for R code issues. 1. Note where the error occurred and what the message was. 2. Restart R (`Ctrl` + `Shift` + `F10`). 3. Try to address the error. 4. Render again. To demonstrate, add an extra space before `year:`. ``` yaml params: producer_id: WUY05 year: 2023 ``` Rendering fails and we get the following error message telling us we have bad indentation at line 9, column 8. ``` yaml ERROR: YAMLError: bad indentation of a mapping entry at line 9, column 8: year: 2023 ^ ``` To fix this, delete the extra space and make sure the entries under `params:` are aligned. ## Environment issues Differences between the Quarto environment and the interactive R environment can cause issues. The most common difference is the working directory. Review the [File Paths section in the Quarto primer](https://wa-department-of-agriculture.github.io/soils/articles/quarto.html#file-paths). Check the working directory is what you expect by including `getwd()` in the `setup` chunk. Running the chunk interactively prints `"C:/Users/jryan/Documents/R/projects/soils-demo"` in the console, while rendering the report prints `"[1] "C:/Users/jryan/Documents/R/projects/soils-demo/template"` in the report. Sometimes the report won't error, but won't look as expected. For example, if we move all `.qmd` files into a subfolder called `template`, then our report will not have access to the `images` or `resources` subdirectories in the main project folder. When rendering to HTML, the Background Jobs tab will print the below warnings, and the report will not have the fonts and colors specified in `styles.css` and the images will be missing. ``` [WARNING] Could not fetch resource resources/styles.css [WARNING] Could not fetch resource images/logo.png [WARNING] Could not fetch resource images/physical.png [WARNING] Could not fetch resource images/biological.png [WARNING] Could not fetch resource images/chemical.png Output created: 01_producer-report.html ``` When rendering to MS Word, the report will fail because it cannot find the `word-template.docx`. ``` [WARNING] Could not fetch resource images/logo.png: replacing image with description [WARNING] Could not fetch resource images/physical.png: replacing image with description [WARNING] Could not fetch resource images/biological.png: replacing image with description [WARNING] Could not fetch resource images/chemical.png: replacing image with description File resources/word-template.docx not found in resource path ``` The [`create-measurement-group-sections` chunk] demonstrates a more complicated environment issue. The chunk runs fine when rendering the report but errors when running interactively. # Common errors ## Invalid parameter values The parameter values set in the YAML header must exist in your data. Fix this error by either changing `params` in the YAML or by adding the sample results for that `producer_id` and `year` to your data. Rendering the report with an invalid `producer_id` and `year` combination results in the following error message. ``` Quitting from lines 206-249 [get-producer-info] (01_producer-report.qmd) Error: ℹ Update `params` in YAML to a valid `producer_id` and `year` combo. ✖ `Abc` and `2023` must exist in your data. Backtrace: Execution halted ``` ## Duplicate chunk labels One common error is duplicated chunk labels, which often occur when copying and pasting code chunks. To fix this issue, change one of the duplicated labels. If there are two chunks labeled `setup`, rendering the report will fail with this error. ``` processing file: 01_producer-report.qmd Error in parse_block(g[-1], g[1], params.src, markdown_mode) : Duplicate chunk label 'setup', which has been used for the chunk: ``` ## `create-measurement-group-sections` chunk This chunk is tricky because it is a child template that creates each measurement group section to be inserted into the parent report. To learn more, see the [`knitr::knit_child()` section in the Quarto primer](https://wa-department-of-agriculture.github.io/soils/articles/quarto.html#knitrknit_child). ### Error when run interactively This chunk will not run because `knitr::knit_child()` is not supposed to be used interactively (see this [Stack Overflow response](https://stackoverflow.com/a/16847729) from the `knitr` developer Yihui Xie). If you try running this chunk, you will get the below error message. ``` r > # create-measurement-group-sections > #| output: asis > > sections <- purrr::map_chr(measurement_groups, \(group) { + knitr::knit_child( + input = "02_section-template.qmd", + envir = rlang::env(), + quiet = TRUE + ) + }) Error in `purrr::map_chr()`: ℹ In index: 1. Caused by error in `setwd()`: ! character argument expected ``` The output indicates the error occurred from `purrr::map_chr()`. When `knit_child()` is run interactively, the environment is not correctly passed to the `envir` argument, resulting in the `character argument expected` from `setwd()`. ### Error when report rendered If the report quit from this chunk, it will likely still give you `` Error in `purrr::map_chr(): ``. Below this, the message may provide further details such as `` Caused by error `function()`: ``. 1. Restart R. 2. In `01_producer-report.qmd`, interactively run all chunks up until this one to load the data into your environment. 3. Open `02_section-template.qmd` and uncomment the `troubleshoot` chunk or assign one of your measurement groups to a variable named `group`. 4. Interactively run each code chunk as described in the [R code issues] troubleshooting steps to figure out what errors in this child document. # Get help - The *R for Data Science (2ed)* by Hadley Wickham, Mine Çetinkaya-Rundel, and Garrett Grolemund has a short section on [troubleshooting in Quarto](https://r4ds.hadley.nz/quarto.html#troubleshooting). - While not Quarto specific, review Shannon Pileggi's [Debugging in R workshop](https://www.youtube.com/watch?v=179x00KGd9M) to learn more strategies for code troubleshooting. - Copy and paste the error message into Google or another search engine. Reference Samantha Csik's talk [Teach Me How to Google](https://samanthacsik.github.io/talks_workshops/2021-10-11-teach-me-how-to-google/). - Look for a similar [issue in the {soils} GitHub repo](https://github.com/WA-Department-of-Agriculture/soils/issues?q=). - If there is no similar issue, or you have a suggestion, please open a [new issue](https://github.com/WA-Department-of-Agriculture/soils/issues/new/choose) with a detailed description of the issue or suggestion. This is preferred so others may benefit from the public documentation. Otherwise, email [jryan\@agr.wa.gov](mailto:jryan@agr.wa.gov). ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ```