The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

lightparser

R-CMD-check Codecov test coverage

You need to extract some specific information from your Rmd or Qmd file? {lightparser} is designed to split your Rmd or Qmd file by sections into a tibble: titles, text, chunks. It stores them as a tibble, so you can easily manipulate it with {dplyr} or {purrr}. Later, you can rebuild a Rmd or Qmd from the tibble.

Installation

You can install the development version of lightparser from GitHub with:

# install.packages("devtools")
devtools::install_github("ThinkR-open/lightparser")

Documentation

Full documentation website on: https://thinkr-open.github.io/lightparser/

Example

Split your Rmd or Qmd file into a tibble:

library(lightparser)

file <- system.file(
  "dev-template-parsing.Rmd",
  package = "lightparser"
)


tbl_rmd <- split_to_tbl(file)
tbl_rmd
#> # A tibble: 35 × 8
#>    type    label       params       text     code  heading heading_level section
#>    <chr>   <chr>       <list>       <named > <lis> <chr>           <dbl> <chr>  
#>  1 yaml    <NA>        <named list> <lgl>    <lgl> <NA>               NA <NA>   
#>  2 inline  <NA>        <lgl [1]>    <chr>    <lgl> <NA>               NA <NA>   
#>  3 block   development <named list> <lgl>    <chr> <NA>               NA <NA>   
#>  4 inline  <NA>        <lgl [1]>    <chr>    <lgl> <NA>               NA <NA>   
#>  5 heading <NA>        <lgl [1]>    <chr>    <lgl> Descri…             1 Descri…
#>  6 inline  <NA>        <lgl [1]>    <chr>    <lgl> <NA>               NA Descri…
#>  7 block   description <named list> <lgl>    <chr> <NA>               NA Descri…
#>  8 inline  <NA>        <lgl [1]>    <chr>    <lgl> <NA>               NA Descri…
#>  9 heading <NA>        <lgl [1]>    <chr>    <lgl> Read d…             1 Read d…
#> 10 inline  <NA>        <lgl [1]>    <chr>    <lgl> <NA>               NA Read d…
#> # ℹ 25 more rows

Combine the tibble into a Rmd or Qmd file:

file_out <- tempfile(fileext = ".Rmd")
out <- combine_tbl_to_file(tbl_rmd, file_out)

Read the file re-created with combine_tbl_to_file() to verify it is a proper Rmd

cat(readLines(file_out), sep = "\n")
#> ---
#> title: dev_history.Rmd for working package
#> output: html_document
#> author: statnmap
#> date: '2023-10-12'
#> editor_options:
#>   chunk_output_type: console
#> ---
#> 
#> 
#> ```{r development}
#> #| include: no
#> 
#> library(testthat)
#> ```
#> 
#> 
#> <!--
#> # Description of your package
#> 
#> This will fill the description of your package.
#> -->
#> ```{r description}
#> # --> for parse tests
#> fusen::fill_description(
#>     pkg = here::here(),
#>     fields = list(
#>         Title = "Build A Package From Rmarkdown file",
#>         Description = "Use Rmarkdown First method to build your package. Start your package with documentation. Everything can be set from a Rmarkdown file in your project.",
#>         `Authors@R` = c(
#>             person("John", "Doe", email = "john@email.me", role = c("aut", "cre"), comment = c(ORCID = "0000-0000-0000-0000"))
#>         )
#>     )
#> )
#> # Define License with use_*_license()
#> usethis::use_mit_license("John Doe")
#> ```
#> 
#> 
#> # Read data
#> 
#> <!-- Store your dataset in a directory named "inst/" at the root of your project -->
#> <!-- Use it for your tests in this Rmd thanks to `load_all()` to make it available
#> and `system.file()` to read it in your examples 
#> -->
#> ```{r development-2}
#> # Set error=TRUE for checks() if needed
#> # Run all in the console directly
#> # Create "inst/" directory
#> dir.create(here::here("inst"))
#> # Example dataset
#> file.copy(system.file("nyc_squirrels_sample.csv", package = "fusen"), here::here("inst"))
#> ```
#> 
#> 
#> # Calculate the median of a vector
#> 
#> Here is some inline R code : `r 1+1`
#> ```{r function}
#> #' My median
#> #'
#> #' @param x Vector of Numeric values
#> #' @inheritParams stats::median
#> #'
#> #' @return
#> #' Median of vector x
#> #' @export
#> #'
#> #' @examples
#> #' my_median(2:20)
#> my_median <- function(x, na.rm = TRUE) {
#>     if (!is.numeric(x)) {
#>         stop("x should be numeric")
#>     }
#>     stats::median(x, na.rm = na.rm)
#> }
#> ```
#> 
#> 
#> ```{r examples}
#> my_median(1:12)
#> ```
#> 
#> 
#> ```{r tests}
#> test_that("my_median works properly and show error if needed", {
#>     expect_error(my_median("text"))
#> })
#> ```
#> 
#> 
#> # Calculate the mean of a vector
#> ## Use sub-functions in the same chunk
#> ```{r function-1}
#> #| filename: the_median_file
#> 
#> #' My Other median
#> #'
#> #' @param x Vector of Numeric values
#> #' @inheritParams stats::median
#> #'
#> #' @return
#> #' Median of vector x
#> #' @export
#> #'
#> #' @examples
#> my_other_median <- function(x, na.rm = TRUE) {
#>     if (!is.numeric(x)) {
#>         stop("x should be numeric")
#>     }
#>     sub_median(x, na.rm = na.rm)
#> }
#> 
#> #' Core of the median not exported
#> #' @param x Vector of Numeric values
#> #' @inheritParams stats::median
#> sub_median <- function(x, na.rm = TRUE) {
#>     stats::median(x, na.rm)
#> }
#> ```
#> 
#> 
#> ```{r examples-1}
#> my_other_median(1:12)
#> my_other_median(8:20)
#> my_other_median(20:50)
#> ```
#> 
#> 
#> ```{r tests-1}
#> test_that("my_median works properly and show error if needed", {
#>     expect_true(my_other_median(1:12) == 6.5)
#>     expect_error(my_other_median("text"))
#> })
#> ```
#> 
#> 
#> ```
#> not a R chunk that should be kept in vignette, but not in code
#> ```
#> 
#> ```{r development-1}
#> #| eval: no
#> 
#> # Run but keep eval=FALSE to avoid infinite loop
#> # Execute in the console directly
#> fusen::inflate(flat_file = "dev/dev_history.Rmd")
#> ```
#> 
#> 
#> 
#> # Inflate your package
#> ```{r}
#> # duplicate empty name
#> ```
#> 
#> 
#> ```{r}
#> # duplicate empty name
#> ```
#> 
#> 
#> 
#> You're one inflate from paper to box.
#> Build your package from this very Rmd using `fusen::inflate()`
#> 
#> - Verify your `"DESCRIPTION"` file has been updated
#> - Verify your function is in `"R/"` directory
#> - Verify your test is in `"tests/testthat/"` directory
#> - Verify this Rmd appears in `"vignettes/"` directory

Similar work

{lightparser} is a light version of {parsermd} that has not been updated for a long time, and which is not compatible with the latest versions of C++ compilers. {lightparser} does not rely on C++ compilation.

Code of Conduct

Please note that the lightparser project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.