Skip to content

Commit

Permalink
update 2024-09-13 10:55:59.694015
Browse files Browse the repository at this point in the history
  • Loading branch information
cjvanlissa committed Sep 13, 2024
2 parents 5c9e1b1 + 7640488 commit 27ea920
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 13 deletions.
2 changes: 1 addition & 1 deletion R/worcs_project.R
Original file line number Diff line number Diff line change
Expand Up @@ -707,5 +707,5 @@ append_yaml <- function(yaml_text, yaml_command, add_this){
this_line <- grep(paste0("^\\s{0,}", yaml_command, "\\s{0,}:"), yaml_text)[1]
gsub(':.*$', paste0(': [', paste0(
dQuote(c(add_this,
trimws(gsub('"', "", strsplit(gsub("^.+?:", "", yaml_text[this_line]), ",")[[1]])))), collapse = ", "), ']'), yaml_text[this_line])
trimws(gsub('"', "", strsplit(gsub("^.+?:", "", yaml_text[this_line]), ",")[[1]]))), q = FALSE), collapse = ", "), ']'), yaml_text[this_line])
}
71 changes: 71 additions & 0 deletions inst/rstudio/templates/project/resources/_targets.rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
title: "Target Markdown"
output: html_document
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```

Target Markdown is a powerful R Markdown interface for reproducible analysis pipelines, and the chapter at https://books.ropensci.org/targets/markdown.html walks through it in detail. This R Markdown report the example from the chapter. Try it out in both interactive and non-interactive modes, either by running the code chunks in different ways or setting the `tar_interactive` chunk option.

# Setup

If you are using old versions of `targets` (<= 0.7.0) and/or `knitr` (<= 1.33), you will need to load the `targets` package in the R Markdown document in order for Target Markdown code chunks to work.

```{r}
library(targets)
```

Near the top of the document, you may also wish to remove the `_targets_r` directory previously written by non-interactive runs of the report. Otherwise, your pipeline may contain superfluous targets.

```{r}
library(targets)
tar_unscript()
```

# Targets

Our first target borrows the `airquality` dataset built into base R.

```{targets raw-data}
tar_target(raw_data, airquality)
```

Our next targets preprocess the data, make a histogram, and fit a model.

```{targets downstream-targets}
list(
tar_target(data, {raw_data[complete.cases(airquality), ]}),
tar_target(hist, hist(data$Ozone))
)
```

Set the `tar_simple` chunk option to `TRUE` to define a single target with the command in the code chunk. The chunk below only contains `biglm(Ozone ~ Wind + Temp, data)` in the source, but because `tar_simple` is `TRUE`, it is shorthand for `tar_target(name = fit, command = biglm(Ozone ~ Wind + Temp, data))`. All other arguments to `tar_target()` are set to their default values (configurable with `tar_option_set()`).

```{targets fit, tar_simple = TRUE}
lm(Ozone ~ Wind + Temp, data)
```

# Pipeline

If you ran all the `{targets}` chunks in non-interactive mode, then your R scripts are set up to run the pipeline.

```{r}
tar_make()
```

# Output

You can retrieve results from the `_targets/` data store using `tar_read()` or `tar_load()`.

```{r, message = FALSE}
tar_read(fit)
```

```{r}
tar_read(hist)
```


At this point, you can go back and run `{targets}` chunks in interactive mode without interfering with the code or data of the non-interactive pipeline.
48 changes: 36 additions & 12 deletions tests/testthat/test-targets.R
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
library(targets)
test_that("targets works with apa6", {
the_test <- "targets"
old_wd <- getwd()
Expand All @@ -7,17 +8,17 @@ test_that("targets works with apa6", {
on.exit({unlink(test_dir, recursive = TRUE); setwd(old_wd)}, add = TRUE)

worcs::worcs_project(path = test_dir,
manuscript = "APA6",
manuscript = "github_document",
preregistration = "None",
add_license = "None",
use_renv = FALSE,
use_targets = TRUE
)
tryCatch(targets::tar_make(), error = function(e){})
rmarkdown::render("manuscript/manuscript.rmd")
file.remove("manuscript/manuscript.pdf")
targets::tar_make()
expect_true(file.exists("manuscript/manuscript.pdf"))
tryCatch(targets::tar_make(), error = function(e){}, warning = function(w){})
tryCatch(rmarkdown::render("manuscript/manuscript.rmd"), error = function(e){}, warning = function(w){})
file.remove("manuscript/manuscript.html")
tryCatch(targets::tar_make(), error = function(e){}, warning = function(w){})
expect_true(file.exists("manuscript/manuscript.html"))
setwd(old_wd)
})

Expand All @@ -30,15 +31,15 @@ test_that("targets works with renv", {
on.exit({unlink(test_dir, recursive = TRUE); setwd(old_wd)}, add = TRUE)

worcs::worcs_project(path = test_dir,
manuscript = "acm_article",
manuscript = "github_document",
preregistration = "None",
add_license = "None",
use_renv = TRUE,
use_targets = TRUE
)
tryCatch(targets::tar_make(), error = function(e){}, warning = function(w){})
rmarkdown::render("manuscript/manuscript.rmd")
expect_true(file.exists("manuscript/manuscript.pdf"))
# rmarkdown::render("manuscript/manuscript.rmd")
expect_true(file.exists("manuscript/manuscript.html"))
setwd(old_wd)
})

Expand All @@ -58,10 +59,33 @@ test_that("targets works with target markdown", {
add_license = "None",
use_renv = FALSE
)
rmarkdown::render("_targets.rmd")
# file.remove(file.path(test_dir, "_targets.rmd"))
if(file.exists(file.path(test_dir, "_targets.r"))){
file.remove(file.path(test_dir, "_targets.r"))
}
linz <- c("---", " title: \"Target Markdown\"", " output: html_document",
"---", "", "```{r setup, include = FALSE}", "knitr::opts_chunk$set(collapse = TRUE, comment = \"#>\")",
"```", "", "# Setup", "", "bla", "", "```{r}", "library(targets)",
"tar_unscript()", "```", "", "# Targets", "", "bla", "", "```{targets raw-data}",
"tar_target(raw_data, airquality)", "```", "", "blbaal", "",
"```{targets downstream-targets}", "list(", " tar_target(data, {raw_data[complete.cases(airquality), ]}),",
" tar_target(hist, hist(data$Ozone))", ")", "```", "", "try this now",
"", "```{targets fit, tar_simple = TRUE}", "lm(Ozone ~ Wind + Temp, data)",
"```", "", "# Pipeline", "", "run everything", "", "```{r}",
"tar_make()", "```", "", "# Output", "", "get results", "", "```{r, message = FALSE}",
"tar_read(fit)", "```", "", "```{r}", "tar_read(hist)", "```",
"", "", "interactive")

cat(linz, file = "_targets.rmd", append = FALSE, sep = "\n")

tryCatch(rmarkdown::render("_targets.rmd"), error = function(e){}, warning = function(w){})

expect_true(file.exists("_targets.html"))
file.remove("_targets.html")
worcs::reproduce()
if(file.exists("_targets.html")){
file.remove("_targets.html")
}

tryCatch(worcs::reproduce(check_endpoints = FALSE), error = function(e){}, warning = function(w){})
if(!file.exists("_targets.html")) stop()

setwd(old_wd)
Expand Down

0 comments on commit 27ea920

Please sign in to comment.