A few helpers for working with the {targets} package in R.
I started to use the {targets}
package for some of my larger projects. It was a little challenging for me to wrap my head around but after working through some initial problems I think it will help me stay organized and write code in a more composable way. Below are a few notes that I needed to keep coming back to when I was getting started. If you need a comprehensive {targets}
getting started I suggest the targets book linked above or in the References section below.
Start a {targets} project
In an empty or existing R project directory run:
targets::use_targets()
The most important targets commands to remember
tar_make() ## Runs your targets workflow
tar_load_everything() ## loads targets so you can view and work with them.
tar_manifest() ## overview of your targets
tar_visnetwork() ## a visual tree of your targets
tar_delete(name_of_target) ## deletes 'name_of_target' target.
VS code keyboard shortcuts
Below are a few keybindings I added to VS Code. They run tar_make()
with control+shift+M and tar_load_everything()
with control+shift+L in the terminal. These are the commands that I use the most. add the following to your VS Code json (ctrl+shift+p and search "keybindings json").
{
"key": "ctrl+shift+m",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "tar_make()\u000D"
}
},
{
"key": "ctrl+shift+l",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "tar_load_everything()\u000D"
}
}
Outputing a file
In your _targets.R
list()
:
list(
##>>>> Other targets above making data...
tar_target(output, output_func(data, output_path), format="file")
)
And then your function file in the /R
directory would look like this:
output_func<-function(data, output_path){
write_csv(data, output_path)
output_path ## you must return an output path so that the file can be tracked.
}
Rmarkdown
To start using Rmarkdown you need the {tarchetypes} package
. Load it right under the {targets}
package in your _targets.R
file with library(tarchetypes)
.
Then to render a Rmarkdown documents in your targets list you can use tar_render()
.
list(
## More targets above
tar_render(documantation, "Rmd/documentation.Rmd")
## More targets
)
Within the Rmarkdown file things are a little different. The two I've used the most are:
tar_read(name_of_target) ## Loads an R object such as a tibble or sf object.
tar_load(name_of_target) ## Loads a plot for example.
Spatial Rasters from the {tera}
package had problems
One problem I had with working with targets is, I work with a lot of spatial grid data. I've been using the [{terra}
] package as my go to grid package. However a bit stumbling block for me was you can't write a SpatialRaster as a targets object. Or at least I couldn't figure out how. I put up a question on Stack Exchange and the terra package maintainer was kind enough to respond. But we never got to a resolution.
I also reached out on Mastadon and Miles McBain, Targets evangelist, was kind enough to get back to me, but also no resolution.
Well that all for now.