From aa3a1b2701aaf51aefbe61cd9ef23bb4a734f4e5 Mon Sep 17 00:00:00 2001
From: richfitz
Create an orderly store with a file store and a complete tree. See
orderly2::orderly_init()
for more details.
id1 <- orderly2::orderly_run("data")
-## ℹ Starting packet 'data' `20240611-121849-b5ffc99c` at 2024-06-11 12:18:49.714057
+## ℹ Starting packet 'data' `20240704-170811-71bf6462` at 2024-07-04 17:08:11.447597
## > d <- read.csv("data.csv")
## > d$z <- resid(lm(y ~ x, d))
## > saveRDS(d, "data.rds")
## ✔ Finished running data.R
-## ℹ Finished 20240611-121849-b5ffc99c at 2024-06-11 12:18:49.751232 (0.03717422 secs)
id2 <- orderly2::orderly_run("analysis")
-## ℹ Starting packet 'analysis' `20240611-121849-c708abf7` at 2024-06-11 12:18:49.780483
+## ℹ Starting packet 'analysis' `20240704-170811-83edccb2` at 2024-07-04 17:08:11.518362
## > orderly2::orderly_dependency("data", "latest()", "data.rds")
-## ℹ Depending on data @ `20240611-121849-b5ffc99c` (via latest(name == "data"))
+## ℹ Depending on data @ `20240704-170811-71bf6462` (via latest(name == "data"))
## > d <- readRDS("data.rds")
## > png("analysis.png")
## > plot(y ~ x, d)
@@ -170,14 +170,14 @@ Basic use## agg_png
## 2
## ✔ Finished running analysis.R
-## ℹ Finished 20240611-121849-c708abf7 at 2024-06-11 12:18:49.910387 (0.1299043 secs)
When we look at the metadata for the packet created from the
analysis
report, we can see it has used
-20240611-121849-b5ffc99c
as its dependency:
20240704-170811-71bf6462
as its dependency:
orderly2::orderly_metadata(id2)$depends
## packet query files
-## 1 20240611-121849-b5ffc99c latest(name == "data") data.rds....
(indeed it had to, there is only one copy of the data
packet to pick from).
cyl
:
orderly2::orderly_run("data", list(cyl = 4))
-## ℹ Starting packet 'data' `20240611-121850-45e462b7` at 2024-06-11 12:18:50.276085
+## ℹ Starting packet 'data' `20240704-170812-02a58562` at 2024-07-04 17:08:12.01351
## ℹ Parameters:
## • cyl: 4
## > orderly2::orderly_parameters(cyl = NULL)
## > d <- mtcars[mtcars$cyl == cyl, ]
## > saveRDS(d, "data.rds")
## ✔ Finished running data.R
-## ℹ Finished 20240611-121850-45e462b7 at 2024-06-11 12:18:50.304853 (0.0287683 secs)
-## [1] "20240611-121850-45e462b7"
orderly2::orderly_run("data", list(cyl = 6))
-## ℹ Starting packet 'data' `20240611-121850-528b1eb5` at 2024-06-11 12:18:50.325351
+## ℹ Starting packet 'data' `20240704-170812-104a14c4` at 2024-07-04 17:08:12.066627
## ℹ Parameters:
## • cyl: 6
## > orderly2::orderly_parameters(cyl = NULL)
## > d <- mtcars[mtcars$cyl == cyl, ]
## > saveRDS(d, "data.rds")
## ✔ Finished running data.R
-## ℹ Finished 20240611-121850-528b1eb5 at 2024-06-11 12:18:50.353864 (0.02851295 secs)
-## [1] "20240611-121850-528b1eb5"
orderly2::orderly_run("data", list(cyl = 8))
-## ℹ Starting packet 'data' `20240611-121850-5f9e4c68` at 2024-06-11 12:18:50.376456
+## ℹ Starting packet 'data' `20240704-170812-1ea1c0d7` at 2024-07-04 17:08:12.123535
## ℹ Parameters:
## • cyl: 8
## > orderly2::orderly_parameters(cyl = NULL)
## > d <- mtcars[mtcars$cyl == cyl, ]
## > saveRDS(d, "data.rds")
## ✔ Finished running data.R
-## ℹ Finished 20240611-121850-5f9e4c68 at 2024-06-11 12:18:50.404856 (0.02840066 secs)
-## [1] "20240611-121850-5f9e4c68"
Our follow-on analysis contains:
orderly2::orderly_parameters(cyl = NULL) @@ -250,7 +250,7 @@
).Filtering candidates by parametersthis:cyl
+## ℹ Finished 20240704-170812-4e24409d at 2024-07-04 17:08:12.362623 (0.05414414 secs) +## [1] "20240704-170812-4e24409d"orderly2::orderly_run("analysis", list(cyl = 4)) -## ℹ Starting packet 'analysis' `20240611-121850-8da82d38` at 2024-06-11 12:18:50.55644 +## ℹ Starting packet 'analysis' `20240704-170812-4e24409d` at 2024-07-04 17:08:12.308479 ## ℹ Parameters: ## • cyl: 4 ## > orderly2::orderly_parameters(cyl = NULL) @@ -258,7 +258,7 @@
Filtering candidates by parameters## + "data", ## + "latest(parameter:cyl == this:cyl)", ## + "data.rds") -## ℹ Depending on data @ `20240611-121850-45e462b7` (via latest(parameter:cyl == this:cyl && name == "data")) +## ℹ Depending on data @ `20240704-170812-02a58562` (via latest(parameter:cyl == this:cyl && name == "data")) ## > d <- readRDS("data.rds") ## > png("analysis.png") ## > plot(mpg ~ disp, d) @@ -266,8 +266,8 @@
Filtering candidates by parameters## agg_png ## 2 ## ✔ Finished running analysis.R -## ℹ Finished 20240611-121850-8da82d38 at 2024-06-11 12:18:50.608357 (0.05191684 secs) -## [1] "20240611-121850-8da82d38"
orderly2::orderly_run("analysis", list(cyl = 9000))
-## ℹ Starting packet 'analysis' `20240611-121850-b0536448` at 2024-06-11 12:18:50.691779
+## ℹ Starting packet 'analysis' `20240704-170812-7234751a` at 2024-07-04 17:08:12.449261
## ℹ Parameters:
## • cyl: 9000
## > orderly2::orderly_parameters(cyl = NULL)
@@ -284,7 +284,7 @@ Interpreting errors## + "latest(parameter:cyl == this:cyl)",
## + "data.rds")
## ✖ Error running analysis.R
-## ℹ Finished 20240611-121850-b0536448 at 2024-06-11 12:18:50.752561 (0.06078267 secs)
+## ℹ Finished 20240704-170812-7234751a at 2024-07-04 17:08:12.513792 (0.06453037 secs)
## Error in `orderly2::orderly_run()`:
## ! Failed to run report
## Caused by error in `outpack_packet_use_dependency()`:
@@ -341,8 +341,8 @@ Interpreting errors## [1] 3
##
## $found
-## [1] "20240611-121850-45e462b7" "20240611-121850-528b1eb5"
-## [3] "20240611-121850-5f9e4c68"
(this would have worked with
rlang::last_error()$explanation$parts$A
too).
You can also use orderly2::orderly_metadata_extract
to
@@ -352,9 +352,9 @@
cyl
took in the evaluating environment.
Instead of a query, you can provide a single id (e.g,
-20240611-121850-8da82d38
), which would mean that even as
+20240704-170812-4e24409d
), which would mean that even as
new copies of the data
packet are created, this dependency
will always resolve to the same value.
You can chain together logical operations with
diff --git a/articles/index.html b/articles/index.html
index 61a42520..d816d63a 100644
--- a/articles/index.html
+++ b/articles/index.html
@@ -10,7 +10,7 @@
orderly2
- 1.99.17
+ 1.99.18
Creating an empty orderly reposito
path <- tempfile() # we'll use a temporary directory here - see note below
orderly2::orderly_init(path)
-## ✔ Created orderly root at '/tmp/Rtmp7EliGM/file1bc2678d650b'
which creates a few files:
## . ## ├── .outpack @@ -183,15 +183,15 @@
:Creating your first orderly reportorderly2::orderly_run()
+## ℹ Finished 20240704-170815-bd0122b0 at 2024-07-04 17:08:15.804086 (0.06095862 secs)id <- orderly2::orderly_run("incoming_data") -## ℹ Starting packet 'incoming_data' `20240611-121853-dc541843` at 2024-06-11 12:18:53.865433 +## ℹ Starting packet 'incoming_data' `20240704-170815-bd0122b0` at 2024-07-04 17:08:15.743127 ## > d <- read.csv("data.csv") ## > d$z <- resid(lm(y ~ x, d)) ## > saveRDS(d, "data.rds") ## ✔ Finished running incoming_data.R -## ℹ Finished 20240611-121853-dc541843 at 2024-06-11 12:18:53.924776 (0.05934334 secs)
id
-## [1] "20240611-121853-dc541843"
The id
that is created is a new identifier for the
packet that will be both unique among all packets (within reason) and
chronologically sortable. A packet that has an id that sorts after
@@ -200,7 +200,7 @@
## .
## ├── archive
## │ └── incoming_data
-## │ └── 20240611-121853-dc541843
+## │ └── 20240704-170815-bd0122b0
## │ ├── data.csv
## │ ├── data.rds
## │ └── incoming_data.R
@@ -213,7 +213,7 @@ Creating your first orderly report## └── incoming_data.R
A few things have changed here:
orderly2::orderly_run()
:
id <- orderly2::orderly_run("analysis")
-## ℹ Starting packet 'analysis' `20240611-121854-656e3f84` at 2024-06-11 12:18:54.399326
+## ℹ Starting packet 'analysis' `20240704-170816-4236b4ff` at 2024-07-04 17:08:16.261844
## > orderly2::orderly_dependency("incoming_data", "latest()",
## + c("incoming.rds" = "data.rds"))
-## ℹ Depending on incoming_data @ `20240611-121853-dc541843` (via latest(name == "incoming_data"))
+## ℹ Depending on incoming_data @ `20240704-170815-bd0122b0` (via latest(name == "incoming_data"))
## > d <- readRDS("incoming.rds")
## > png("analysis.png")
## > plot(y ~ x, d)
@@ -296,7 +296,7 @@ Depending on packets from anot
## agg_png
## 2
## ✔ Finished running analysis.R
-## ℹ Finished 20240611-121854-656e3f84 at 2024-06-11 12:18:54.479024 (0.07969761 secs)
For more information on dependencies, see
vignette("dependencies")
.
id <- orderly2::orderly_run("incoming_data")
-## ℹ Starting packet 'incoming_data' `20240611-121854-aefeb7e6` at 2024-06-11 12:18:54.685393
+## ℹ Starting packet 'incoming_data' `20240704-170816-8dbc611c` at 2024-07-04 17:08:16.555583
## > orderly2::orderly_strict_mode()
## > orderly2::orderly_resource("data.csv")
## > orderly2::orderly_artefact("Processed data", "data.rds")
@@ -378,7 +378,7 @@ Available in-report orderly comman
## > d$z <- resid(lm(y ~ x, d))
## > saveRDS(d, "data.rds")
## ✔ Finished running incoming_data.R
-## ℹ Finished 20240611-121854-aefeb7e6 at 2024-06-11 12:18:54.713359 (0.02796626 secs)
id <- orderly2::orderly_run("random", list(n_samples = 15))
-## ℹ Starting packet 'random' `20240611-121854-ec525cf0` at 2024-06-11 12:18:54.926169
+## ℹ Starting packet 'random' `20240704-170816-cce31d75` at 2024-07-04 17:08:16.803498
## ℹ Parameters:
## • n_samples: 15
## > orderly2::orderly_parameters(n_samples = 10)
@@ -428,7 +428,7 @@ Parameterised reports## > d <- data.frame(x = x, y = x + rnorm(n_samples))
## > saveRDS(d, "data.rds")
## ✔ Finished running random.R
-## ℹ Finished 20240611-121854-ec525cf0 at 2024-06-11 12:18:54.954483 (0.02831435 secs)
Our resulting file has 15 rows, as the parameter we passed in affected the report:
@@ -455,11 +455,11 @@Parameterised reports
+## [1] "20240704-170816-cce31d75"orderly2::orderly_search('latest(name == "random")') -## [1] "20240611-121854-ec525cf0"
But we can also pass in parameter queries here:
orderly2::orderly_search('latest(name == "random" && parameter:n_samples > 10)')
-## [1] "20240611-121854-ec525cf0"
These can be used within orderly2::orderly_dependency()
(the name == "random"
part is implied by the first
name
argument), for example
## .
## ├── archive
## │ ├── analysis
-## │ │ └── 20240611-121854-656e3f84
+## │ │ └── 20240704-170816-4236b4ff
## │ │ ├── analysis.R
## │ │ ├── analysis.png
## │ │ └── incoming.rds
## │ ├── incoming_data
-## │ │ ├── 20240611-121853-dc541843
+## │ │ ├── 20240704-170815-bd0122b0
## │ │ │ ├── data.csv
## │ │ │ ├── data.rds
## │ │ │ └── incoming_data.R
-## │ │ └── 20240611-121854-aefeb7e6
+## │ │ └── 20240704-170816-8dbc611c
## │ │ ├── data.csv
## │ │ ├── data.rds
## │ │ └── incoming_data.R
## │ └── random
-## │ └── 20240611-121854-ec525cf0
+## │ └── 20240704-170816-cce31d75
## │ ├── data.rds
## │ └── random.R
## ├── draft
@@ -536,7 +536,7 @@ Shared resourcesWe can run this:
id <- orderly2::orderly_run("use_shared")
-## ℹ Starting packet 'use_shared' `20240611-121855-6894388c` at 2024-06-11 12:18:55.411631
+## ℹ Starting packet 'use_shared' `20240704-170817-4dacb09b` at 2024-07-04 17:08:17.306625
## > orderly2::orderly_shared_resource("data.csv")
## > orderly2::orderly_artefact("analysis", "analysis.png")
## > d <- read.csv("data.csv")
@@ -546,11 +546,11 @@ Shared resources## agg_png
## 2
## ✔ Finished running use_shared.R
-## ℹ Finished 20240611-121855-6894388c at 2024-06-11 12:18:55.444708 (0.033077 secs)
+## ℹ Finished 20240704-170817-4dacb09b at 2024-07-04 17:08:17.341199 (0.03457475 secs)
In the resulting archive, the file that was used from the shared directory is present:
## archive/use_shared
-## └── 20240611-121855-6894388c
+## └── 20240704-170817-4dacb09b
## ├── analysis.png
## ├── data.csv
## └── use_shared.R
@@ -644,49 +644,49 @@ When we run the analysis
task, it will pull in the most
-recent version (20240611-121854-aefeb7e6
). However, if you
+recent version (20240704-170816-8dbc611c
). However, if you
had deleted this manually (e.g., to save space or accidentally) or
corrupted it (e.g., by opening some output in Excel and letting it save
changes) it will not be able to be included, and running
analysis
will fail:
orderly2::orderly_run("analysis")
-## ℹ Starting packet 'analysis' `20240611-121856-02f98199` at 2024-06-11 12:18:56.014657
+## ℹ Starting packet 'analysis' `20240704-170817-ec8098bb` at 2024-07-04 17:08:17.927104
## > orderly2::orderly_dependency("incoming_data", "latest()",
## + c("incoming.rds" = "data.rds"))
## ✖ Error running analysis.R
-## ℹ Finished 20240611-121856-02f98199 at 2024-06-11 12:18:56.090559 (0.07590199 secs)
+## ℹ Finished 20240704-170817-ec8098bb at 2024-07-04 17:08:18.008087 (0.08098221 secs)
## Error in `orderly2::orderly_run()`:
## ! Failed to run report
## Caused by error in `orderly_copy_files()`:
-## ! Unable to copy files, due to deleted packet 20240611-121854-aefeb7e6
-## ℹ Consider 'orderly2::orderly_validate_archive("20240611-121854-aefeb7e6",
+## ! Unable to copy files, due to deleted packet 20240704-170816-8dbc611c
+## ℹ Consider 'orderly2::orderly_validate_archive("20240704-170816-8dbc611c",
## action = "orphan")' to remove this packet from consideration
## Caused by error:
## ! File not found in archive
## ✖ data.rds
The error here tries to be fairly informative, telling us that we
failed because when copying files from
-20240611-121854-aefeb7e6
we found that the packet was
+20240704-170816-8dbc611c
we found that the packet was
corrupt, because the file data.rds
was not found in the
archive. It also suggests a fix; we can tell orderly2
that
-20240611-121854-aefeb7e6
is “orphaned” and should not be
+20240704-170816-8dbc611c
is “orphaned” and should not be
considered for inclusion when we look for dependencies.
We can carry out the suggestion and just validate this packet by running
-orderly2::orderly_validate_archive("20240611-121854-aefeb7e6", action = "orphan")
orderly2::orderly_validate_archive("20240704-170816-8dbc611c", action = "orphan")
or we can validate all the packets we have:
orderly2::orderly_validate_archive(action = "orphan")
-## ✔ 20240611-121853-dc541843 (incoming_data) is valid
-## ✔ 20240611-121854-656e3f84 (analysis) is valid
-## ✖ 20240611-121854-aefeb7e6 (incoming_data) is invalid due to its files
-## ✔ 20240611-121854-ec525cf0 (random) is valid
-## ✔ 20240611-121855-6894388c (use_shared) is valid
If we had the option core.require_complete_tree
enabled,
then this process would also look for any packets that used our
now-deleted packet and orphan those too, as we no longer have a complete
@@ -773,16 +773,16 @@
As can be perhaps inferred from the filenames, the files
.outpack/metadata/<packet-id>
are the metadata for
each packet as it has been run. The files
@@ -802,6 +802,8 @@
The files under Our plugin is called subsequent calls will not display the warning: The rest of this section discusses how you might permanently fix the
issue. FitzJohn R, Ashton R, Hill A (2024).
orderly2: Orderly Next Generation.
-R package version 1.99.17, https://github.com/mrc-ide/orderly2.
+R package version 1.99.18, https://github.com/mrc-ide/orderly2.
.outpack/files/
should never be modified
or deleted. This approach to storage naturally deduplicates the file
archive, so that a large file used in many places is only ever stored
diff --git a/articles/metadata.html b/articles/metadata.html
index cb4406cc..7b90f462 100644
--- a/articles/metadata.html
+++ b/articles/metadata.html
@@ -26,7 +26,7 @@
orderly2
- 1.99.17
+ 1.99.18
An example
+ path: /tmp/RtmpmyJQ4F/file1c6a34521d24
minimum_orderly_version: 1.99.0
plugins:
example.db:
- path: /tmp/Rtmpzhwfug/file1cb335e00d2
example.db
and is listed within the
plugins
section, along with its configuration; in this case
indicating the path where the SQLite file can be loaded from.Trying it out
+## ℹ Finished 20240704-170826-7ed6ede1 at 2024-07-04 17:08:26.600168 (0.1002791 secs)
+## [1] "20240704-170826-7ed6ede1"
orderly2::orderly_run("example", root = path_root)
-## ℹ Starting packet 'example' `20240611-121904-22f955fa` at 2024-06-11 12:19:04.141001
+## ℹ Starting packet 'example' `20240704-170826-7ed6ede1` at 2024-07-04 17:08:26.499889
## > dat <- example.db::query("SELECT * FROM mtcars WHERE cyl == 4")
## > orderly2::orderly_artefact("Summary of data", "data.rds")
## > saveRDS(summary(dat), "data.rds")
## ✔ Finished running example.R
-## ℹ Finished 20240611-121904-22f955fa at 2024-06-11 12:19:04.232886 (0.09188581 secs)
-## [1] "20240611-121904-22f955fa"
Saving metadata about what th
## .
## ├── archive
## │ └── example
-## │ └── 20240611-121904-22f955fa
+## │ └── 20240704-170826-7ed6ede1
## │ ├── data.rds
## │ └── example.R
## ├── draft
@@ -501,12 +501,12 @@
Saving metadata about what th
several).
id <- orderly2::orderly_run("example", root = path_root)
-## ℹ Starting packet 'example' `20240611-121905-2c84bccf` at 2024-06-11 12:19:05.17701
+## ℹ Starting packet 'example' `20240704-170827-9485ba4f` at 2024-07-04 17:08:27.583517
## > dat <- example.db::query("SELECT * FROM mtcars WHERE cyl == 4")
## > orderly2::orderly_artefact("Summary of data", "data.rds")
## > saveRDS(summary(dat), "data.rds")
## ✔ Finished running example.R
-## ℹ Finished 20240611-121905-2c84bccf at 2024-06-11 12:19:05.223357 (0.04634714 secs)
meta <- orderly2::orderly_metadata(id, root = path_root)
meta$custom$example.db
diff --git a/articles/query.html b/articles/query.html
index 44822b04..61e38b69 100644
--- a/articles/query.html
+++ b/articles/query.html
@@ -26,7 +26,7 @@
orderly2
- 1.99.17
+ 1.99.18
Outpack files accidentally
## <https://mrc-ide.github.io/orderly2/articles/troubleshooting.html>
## This warning is displayed once per session.
-## ✔ Wrote '.gitignore'
+## ℹ Starting packet 'data' `20240611-121911-91f695da` at 2024-06-11 12:19:11.573209
## ℹ Starting packet 'data' `20240704-170834-8ea57755` at 2024-07-04 17:08:34.560569
## > orderly2::orderly_artefact("Final data", "data.rds")
## > saveRDS(mtcars, "data.rds")
-## ✔ Finished running data.R
-## ℹ Finished 20240611-121911-91f695da at 2024-06-11 12:19:11.609379 (0.03617024 secs)
+## [1] "20240611-121911-91f695da"
+## ℹ Finished 20240704-170834-8ea57755 at 2024-07-04 17:08:34.600276 (0.03970623 secs)
## [1] "20240704-170834-8ea57755"
orderly2::orderly_run("data")
+## ℹ Starting packet 'data' `20240611-121911-b19b31c6` at 2024-06-11 12:19:11.696782
## ℹ Starting packet 'data' `20240704-170834-b02229f4` at 2024-07-04 17:08:34.691459
## > orderly2::orderly_artefact("Final data", "data.rds")
## > saveRDS(mtcars, "data.rds")
-## ✔ Finished running data.R
-## ℹ Finished 20240611-121911-b19b31c6 at 2024-06-11 12:19:11.720755 (0.02397323 secs)
+## [1] "20240611-121911-b19b31c6"
+## ℹ Finished 20240704-170834-b02229f4 at 2024-07-04 17:08:34.717708 (0.02624917 secs)
## [1] "20240704-170834-b02229f4"
Citation
@Manual{,
title = {orderly2: Orderly Next Generation},
author = {Rich FitzJohn and Robert Ashton and Alex Hill},
year = {2024},
- note = {R package version 1.99.17},
+ note = {R package version 1.99.18},
url = {https://github.com/mrc-ide/orderly2},
}
Use locationsorderly_location_pull_packet()
-
orderly_location_push()
diff --git a/reference/orderly_artefact.html b/reference/orderly_artefact.html
index d83f182e..aefe547a 100644
--- a/reference/orderly_artefact.html
+++ b/reference/orderly_artefact.html
@@ -14,7 +14,7 @@
orderly2
- 1.99.17
+ 1.99.18
Notes for user of orderly1Examples
# Create a simple example:
path <- orderly2::orderly_example("default")
-#> ✔ Created orderly root at '/tmp/Rtmpxn43nv/file18351ed651d0'
+#> ✔ Created orderly root at '/tmp/RtmpaZk3OV/file17ee67ac082'
# We simulate running a packet interactively by using 'source';
# you might have run this line-by-line, or with the "Source"
# button in Rstudio.
source(file.path(path, "src/data/data.R"), chdir = TRUE)
-#> Warning: cannot open file '/tmp/Rtmpxn43nv/file18351ed651d0/src/data/data.R': No such file or directory
+#> Warning: cannot open file '/tmp/RtmpaZk3OV/file17ee67ac082/src/data/data.R': No such file or directory
#> Error in file(filename, "r", encoding = encoding): cannot open the connection
# Having run this, the output of the report is present in the
# source directory:
fs::dir_tree(path)
-#> Error: [ENOENT] Failed to search directory '/tmp/Rtmpxn43nv/file18351ed651d0': no such file or directory
+#> Error: [ENOENT] Failed to search directory '/tmp/RtmpaZk3OV/file17ee67ac082': no such file or directory
# We can detect what might want cleaning up by running
# "orderly_cleanup_status":
orderly2::orderly_cleanup_status("data", root = path)
-#> Error: Directory does not exist: '/tmp/Rtmpxn43nv/file18351ed651d0'
+#> Error: Directory does not exist: '/tmp/RtmpaZk3OV/file17ee67ac082'
# Soon this will print more nicely to the screen, but for now you
# can see that the status of "data.rds" is "derived", which means
@@ -176,7 +176,7 @@
Examples
# Do the actual deletion:
orderly2::orderly_cleanup("data", root = path)
-#> Error: Directory does not exist: '/tmp/Rtmpxn43nv/file18351ed651d0'
+#> Error: Directory does not exist: '/tmp/RtmpaZk3OV/file17ee67ac082'