tar_meta() default settings fortar_read() etc. (for million-target pipelines)."terse" reporter by default if the callingsession is non-interactive. This will hopefully avoid problems on CRANfor packages that usetargets with the defaultsettings.tar_renv() (#1506,rstudioapi::isAvailable() (#1519,@dipterix).qmethod = "escape" to avoidhttps://github.com/Rdatatable/data.table/issues/3509 (#1480,error = "trim" does not hang when the erroredtarget has a long chain of reverse dependencies (#1481,"rlib_error_package_not_found"from errors (#1484,suppressPackageStartupMessages() once for thewhole pipeline. Repeated target-specific calls may be slow, and themessages themselves are cumbersome. This is an appropriatetradeoff.tar_debug_instructions().cli::cli_text() instead ofcli::cli_progress_output() (#1478,tar_make()(#1482)._targets/objects/ time stamps only for localbuilders mentioned in the metadata, as opposed to everything in thatdirectory (#1482).format is"file" andrepository is not"local", then the local fileis no longer deleted after upload (#1467).rstudio_available() returnsFALSEwithout error ifrstudioapi is not installed."terse" reporter, which is the"balanced" reporter without the progress bar. Make"terse" the default reporterpriority argument oftar_target(). Because of #1458, custom priorities no longerhave an effect on execution order. However, up-to-date parallelizedpipelines with 100000+ targets can now be checked around 10 timesfaster, so the tradeoff is worth it. And as a workaround, you can sendhigh-priority targets to one or more specialcrewcontrollers in a controller group (details:https://books.ropensci.org/targets/crew.html#heterogeneous-workers).format = "file" files on disk even for non-localrepositories (#1467).tar_option_get(), setrepository_metato"local" by default, regardless ofrepository (#1427).tar_option_get(), setstorage = "worker",retrieval = "auto", andmemory = "auto" by default (#1426). Formemory,"auto" is now equivalent to"transient" most of the time, but it is equivalent to"persistent" for non-dynamic targets that other targetsdynamically branch over. Forretrieval, the"auto" setting is new. It is equivalent to"worker" for most cases, but it aligns with"main" for dynamic branches that branch over non-dynamictargets. All this is to avoid re-reading the upstream target from diskevery time a branch needs to run.tar_make() andtar_outdated().garbage_collection argument oftar_option_get() to 0 (#1464).crewcontrollers are saturated.storage,retrieval, andmemory that balance resource tradeoffs for the most commonpipelines (#1426).targets:::target_run()(#1464). There is no longer a separategc() call on themain process.store_sync_file_meta() in thegeneral case.tar_option_get("repository_meta") is"aws" or"gcp". Download them withtar_workspace_download() and delete them withtar_destroy(destroy = "all") ortar_destroy(destroy = "cloud").format = "auto"(#1425,store_read_path.tar_auto() (#1429,iteration = "group"branching problems.cli::style_reset() at the end of non-silentreporters (#1450,visNetwork graph based on the number of hierarchical levelsand the maximum number of vertices per level (#1432).tar_visnetwork(), choose the colors of the edgesbased on the origin vertices, not the destination vertices (#1433)."verbose" and"timestamp"reporters, print “dispatched pattern” messages, and print the totalcomputation and storage summed over all the branches."balanced" reporter with acli progress bar (#1442)."forecast","forecast_interactive","verbose_positives",and"timestamp_positives" (#1442).callr process (#1442).tar_option_with()(https://github.com/ropensci/tarchetypes/issues/215,prettyunits to print elapsed times and filesizes.tar_make() error message.on_worker argument totarget_run() andbuilder_unload_value() so thelatter only removes the target value if the target was actually run on aworker.R6classes.crew task retries.NA buckets instore_delete_objects.tar_aws() andstore_delete_objects.tar_gcp().These changes invalidate certain targets in a pipeline and cause themto rerun on the nexttar_make().
tar_repository_cas()output strings to reduce the size of pipeline metadata (#1390).tar_format() outputstrings to reduce the size of pipeline metadata (#1390).tar_make() andtar_outdated() run muchfaster in this release. Extensive profiling was done on a real-worldsimulation pipeline with 66002 up-to-date targets. Fortar_make() using all the default settings:
| Machine | Before (seconds) | After (seconds) | Speedup |
|---|---|---|---|
| M2 Macbook | 413.16 | 35.538 | 11.62587 |
| RHEL9 | 450.66 | 94.08 | 4.790 |
And fortar_outdated() using all the defaultsettings
| Machine | Before (seconds) | After (seconds) | Speedup |
|---|---|---|---|
| M2 Macbook | 91.314 | 16.636 | 5.48894 |
| RHEL9 | 167.809 | 37.395 | 4.487472 |
To take advantage of these speed gains for an existing pipeline, youmay have to runtar_make() to convert the time stamps andfile sizes to a new format. This initialtar_make() isslow, but subsequenttar_make() calls should be much fasterthan before the upgrade.
tar_make() andtar_outdated() byavoiding excessive buffering and disk writes for metadata and reporterswhen the pipeline is just skipping targets.tar_runtime$file_info (#1398)."forecast_interactive" reporter totar_outdated() to choose"forecast" forinteractive sessions and"silent" for non-interactiveones.seconds_reporter_outdated argument totar_config_set() with a default of 1 to control the timeinterval of the reporter oftar_outdated() and otherpassive algorithm functions.pathvectors with cloud metadata (#1382,ps::ps_disk_partitions() andps::ps_fs_mount_point()._targets/objects/ paths in metadata forCAS repositories (#1391).igraph >= 2.1.2.format = "file_fast"(#1339,error = "trim" (#1340,garbage_collection to be a non-negative integerto control the frequency of garbage collection in a performant,convenient, unified way (#1351).garbage_collection argument oftar_make(),tar_make_future(), andtar_make_clusterm() (#1351).target_run(),target_prepare(),andtarget_conclude() usingautometric."vctrs_error_subscript_oob" torlang::abort()(#1354,store_assert_format() andstore_convert_object() isstorage is"none".list() method totar_repository_cas() to make it easier and more efficientto specify custom CAS repositories (#1366).memory is"transient" (#1364).memory class with the newlookup class.memory = "auto" to select transient memoryfor dynamic branches and persistent memory for other targets(#1371).retrieval is"main" and only a bud is actuallyused. The same cannot be done with branches because each branch may needto be (un)marshaled individually.retrieval is"worker" and the whole pattern is part of thesubpipeline.format = "qs" fromqs toqs2 (#1373).tar_unblock_process()."keepNA" and"keepInteger" to.deparseOpts() (#1375). This may cause existing pipelinesto rerun, but it makes add-ons liketarchetypes::tar_map()much easier to use.tar_watch() UI module inbslib::page() (#1302,callr_function intar_make_as_job()argument list.storage = "worker" is respected when the processof storing an object generates an error (#1304,_targets.R pattern intar_branches() (#1306,tar_prune() (#1312,workspace_on_error option toTRUE (#1310,error = "stop" errormessage._targets/objects forerror = "null". Instead, switch to a special"null" storage format class iferror is"null" the target throws an error. This should allow usersto more freely create new formats withtar_format() withoutworrying about how to handleNULL objects created byerror = "null".format = "auto" (#1311,pingr dependency withbase::socketConnection() for local URL utilities (#1317,#1318,tar_repository_cas(),tar_repository_cas_local(), andtar_repository_cas_local_gc() for content-addressablestorage (#1232, #1314,tar_format_get() to make implementing CAS systemseasier.error = "trim" intar_target()andtar_option_set() (#1310, #1311,format = "file_fast" in favor of the above(#1315).trust_object_timestamps in favor of the moreunifiedtrust_timestamps intar_option_set()(#1315).tar_target() andtar_target_raw(). Same withtar_load() andtar_load_raw().substitute argument totar_format()to make it easier to write custom storage formats withoutmetaprogramming.bslib intar_watch().target_upstream_edges() andpipeline_upstream_edges() by avoiding data frames until thelast minute (17% speedup for certain kinds of large pipelines).as_job toFALSE intar_make() ifrstudioapi and/or RStudio is notavailable.secretbase::siphash13() instead ofdigest(algo = "xxhash64", serializationVersion = 3) sohashes of in-memory objects no longer depend on serialization version 3headers (#1244,targets will need torerun.targets and changes to the package will causethe current work to rerun (#1244). For thetar_make*()functions,utils::menu() prompts the user to give people achance to downgrade if necessary.data.table::fread(), then convert themto the correct types afterwards.tar_resources_custom_format() function whichcan pass environment variables to customize the behavior of customtar_format() storage formats (#1263, #1232,extras intar_renv().tar_target() gains adescription argumentfor free-form text describing what the target is about (#1230, #1235,#1236,@tjmahr).tar_visnetwork(),tar_glimpse(),tar_network(),tar_mermaid(), andtar_manifest() now optionally show target descriptions(#1230, #1235, #1236,tar_described_as() is a new wrapper aroundtidyselect::any_of() to select specific subsets of targetsbased on the description rather than the name (#1136, #1196,names argument (nudgeusers towardtidyselect expressions).arrow-related CRAN check NOTE.use_targets() only writes the_targets.Rscript. Therun.sh andrun.R scripts aresuperseded by theas_job argument oftar_make(). Users not using the RStudio IDE can calltar_make() withcallr_function = callr::r_bgto run the pipeline as a background process.tar_make_clustermq() andtar_make_future() aresuperseded in favortar_make(use_crew = TRUE), so templatefiles are no longer written for the former automatically.Because of the changes below, upgrading to this version oftargets will unavoidably invalidate previously builttargets in existing pipelines. Your pipeline code should still work, butany targets you ran before will most likely need to rerun after theupgrade.
tar_seed_create(), usesecretbase::sha3(x = TARGET_NAME, bits = 32L, convert = NA)to generate target seeds that are more resistant to overlapping RNGstreams (#1139,digest::digest(algo = "sha512") anddigets::digest2int().deployment argument oftar_target() to reflect the advent ofcrew(#1208,cli.num_colors on exit intar_error() andtar_warning() (#1210,seconds_timeout if thecrew controller is actually a controller group (#1207,https://github.com/wlandau/crew.cluster/discussions/35,tar_make() gains anas_job argument tooptionally run atargets pipeline as an RStudio job.igraph version to 2.0.0 becauseigraph::get.edgelist() was deprecated in favor ofigraph::as_edgelist().crew controllers(or controller groups) (#1220). Use the newpush_backlog()andpop_backlog()crew methods to make thissmooth.tar_make() ifthere is already atargets pipeline running on a localprocess on the same local data store. The local process is detectedusing the process ID and time stamp fromtar_process()(with a 1.01-second tolerance for the time stamp).pkgload::load_all() warning (#1218). Tried using.__DEVTOOLS__ but it interferes with reversedependencies.tar_target_raw()to let users know thatiteration = "group" is invalid fordynamic targets (ones withpattern = map(...) etc.; #1226,@bmfazio).clustermq version to 0.9.2.tar_debug_instructions() tips for whencommands are long.Because of the changes below, upgrading to this version oftargets will unavoidably invalidate previously builttargets in existing pipelines. Your pipeline code should still work, butany targets you ran before will most likely need to rerun after theupgrade.
tar_seed_create() help file fordetails and justification. Unfortunately, this change will invalidateall currently built targets because the seeds will be different. Toavoid rerunning your whole pipeline, setcue = tar_cue(seed = FALSE) intar_target().targets:::digest_chr64() in both cases beforestoring the result in the metadata.targets now tries to ensure that the up-to-date dataobjects in the cloud are in their newest versions. So if you roll backthe metadata to an older version, you will still be able to accesshistorical data versions with e.g. tar_read(), but thepipeline will no longer be up to date.tar_seed_create() whichcreates target-specific pseudo-random number generator seeds.tar_seed_create()help file to justify and defend howtargets andtarchetypes approach pseudo-random numbers.tar_seed_set() which sets a seed and setsall the RNG algorithms to their defaults in the R installation of theuser. Each target now usestar_seed_set() function to setits seed before running its R command (#1139).tar_seed() in favor of the newtar_seed_get() function.tar_delete(),tar_destroy(), andtar_prune() now useefficient batched calls todelete_objects() instead ofcostly individual calls todelete_object() (#1171).verbose argument totar_delete(),tar_destroy(), andtar_prune().batch_size argument totar_delete(),tar_destroy(), andtar_prune().page_size andverbose totar_resources_aws() (#1172).tar_unversion() function to remove versionIDs from the metadata of cloud targets. This makes it easier to interactwith just the current version of each target, as opposed to the versionID recorded in the local metadata.clustermq 0.9.0 (tar_started() in favor oftar_dispatched() (#1192).tar_built() in favor oftar_completed() (#1192).crew scheduling algorithm no longer waits onsaturated controllers, and targets that are ready are greedilydispatched tocrew even if all workers are busy (#1182,#1192). To appropriately set expectations for users, reporters print“dispatched (pending)” instead of “dispatched” if the task load isbacklogged at the moment.crew scheduling algorithm, waiting for tasks isnow a truly event-driven process and consumes 5-10x less CPU resources(#1183). Only the auto-scaling of workers uses polling (with aninexpensive default polling interval of 0.5 seconds, configurablethroughseconds_interval in the controller).tar_config_projects() andtar_config_yaml() (#1153,builder_wait_correct_hash() intarget_conclude.tar_builder() (#1154,builder_error_null().tar_meta_upload() andtar_meta_download() to avoid errors if one or more metadatafiles do not exist. Add a new argumentstrict to controlerror behavior.meta,progress,process, andcrew to control individualmetadata files intar_meta_upload(),tar_meta_download(),tar_meta_sync(), andtar_meta_delete().crew0.5.0.9003 (https://github.com/wlnadau/crew/issues/131).tar_read() etc. inside a pipeline whenever ituses a different data store (#1158,seed = FALSE infuture::future()(#1166,@svraka).physics argument totar_visnetwork() andtar_glimpse() (#925,Because of these changes, upgrading to this version oftargets will unavoidably invalidate previously builttargets in existing pipelines. Your pipeline code should still work, butany targets you ran before will most likely need to rerun after theupgrade.
hash_deps() method of the metadata class,exclude symbols which are not actually dependencies, rather than justgiving them empty strings. This change decouples the dependency hashfrom the hash of the target’s command (#1108).tar_make(),tar_make_clustermq(), andtar_make_future() (#1109). Upload them to the repositoryspecified in therepository_metatar_option_set() option, and use the bucket and prefix setin theresourcestar_option_set() option.repository_meta defaults to the existingrepositorytar_option_set() option.tar_meta_download(),tar_meta_upload(),tar_meta_sync(), andtar_meta_delete() to directly manage cloud metadata outsidethe pipeline (#1109).tempdir() for #1103.path_scratch_dir_network() tofile.path(tempdir(), "targets") and make suretar_destroy("all") andtar_destroy("cloud")delete it.tar_mermaid() subgraphs with transparent fillsand black borders.database$get_data() to work with listcolumns.tarchetypes literate programming target factories liketar_render() andtar_quarto().hash_deps() method of the metadata class, use anew customsort_chr() function which temporarily sets theLC_COLLATE locale to"C" for sorting. Thisensures lexicographic comparisons are consistent across platforms(#1108).tar_source(), use thefile argument andkeep.source = TRUE to help with interactive debugging(#1120).seconds_interval intar_config_get(),tar_make(),tar_make_clustermq() andtar_make_future().Replace it withseconds_meta (to control how often metadatagets saved) andseconds_reporter (to control how often toprint messages to the R console) (#1119).seconds_meta andseconds_reporterfor writing metadata and console messages even for currently buildingtargets (#1055).googleAuthR(#1112).format = "url", only retry on the HTTP error codesabove.seconds_interval andseconds_timeout fromtar_resources_url(), andimplementmax_tries arguments intar_resources_aws() andtar_resources_gcp()(#1127).file andkeep.source inparse() incallr utils and targetMarkdown."file_fast" format to"file" format for cloud targets.tar_prune() andtar_delete(), do nottry to delete pattern targets which have no cloud storage.seconds_timeout,close_connection,s3_force_path_style totar_resources_aws() to support the analogous arguments inpaws.storage::s3() (#1134,tar_prune_list() (#1090,file.rename() intryCatch() and fallback on a copy-then-remove workaround (tools::R_user_dir(package = "targets", which = "cache")instead oftempdir().tar_destroy(destroy = "cloud") andtar_destroy(destroy = "all") remove any leftover files fromfailed uploads/downloads (paws.storage instead of all ofpaws.crew integrationcrewcontrollers._targets.R file fromuse_targets().tar_crew() compatible withcrew >=0.3.0.terminate toterminate_controller intar_make().use_crew intar_make() andadd an option intar_config_set() to make itconfigurable.target_prepare().label andlevel_separation arguments throughtar_config_set() (#1085,nanonext usage intime_seconds_local() at runtime and not installation time.That way, ifnanonext is removed aftertargetsis installed, functions intargets still work. Fixes theCRAN issues seen intarchetypes,jagstargets,andgittargets.crew-related startup messages.cli colors and bullets to improveperformance in RStudio.packageStartupMessage() for package startupmessages.crew is used.gc() more appropriately whengarbage_collection isTRUE intar_target().garbage_collection arguments totar_make(),tar_make_clustermq(), andtar_make_future() to add optional garbage collection beforetargets are sent to workers. This is different and independent from thegarbage_collection argument oftar_target().In high-performance computing scenarios, the former controls whathappens on the main controlling process, whereas the latter controlswhat happens on the worker.garbage_collection andseconds_interval arguments totar_make(),tar_make_clustermq(),tar_make_future(), andtar_config_set().tar_runtime object."file_fast" format and thetrust_object_timestamps option intar_option_set() as safer alternatives.crew controller groups (#1065,tar_backoff(). Thebackoff argument oftar_option_set() now accepts output fromtar_backoff(), and supplying a numeric is deprecated.crewscheduling algorithm.tar_resources_network() to configure retriesand timeouts for internal HTTP/HTTPS requests in specialized targetswithformat = "url",repository = "aws", andrepository = "gcp". Also applies to syncing target filesacross network file systems in the case ofstorage = "worker" orformat = "file", whichpreviously had a hard-codedseconds_interval = 0.1 andseconds_timeout = 60.seconds_interval andseconds_timeout intar_resources_url() infavor of the new equivalent arguments oftar_resources_network()crew controller whenthe controller is saturated (#1074,crew controller.paws.common (_targets/objects/ intar_callr_inner_try() and update the cache as targets aresaved to_targets/objects/ to avoid the overhead ofrepeated calls tofile.exists() andfile.info() (#1056)._targets/objects/ are up to date (#1062).tar_option_set(trust_object_timestamps = FALSE) ignores thetimestamps and recomputes the hashes._targets/meta/meta and_targets/meta/progress in timed batches instead of line byline (#1055).tempfile() when working with the scratchdirectory.nanonext::mclock() instead ofproc.time() when there is no risk of forked processes.withr with slightly faster/leaner base Ralternatives.setwd()(#1057).tar_options methods in the internals instead oftar_option_get().gsub() instore_init().meta$get_record() inbuilder_should_run().cli::col_none() to reduce the number of ANSIcharacters printed to the R console.targets is moving to version 1.0.0 because it issignificantly more mature than previous versions. Specifically,
tar_make() now integrates withcrew, whichwill significantly improve the waytargets doeshigh-performance computing going forward.targets has stabilized.There is still room for smaller new features, but none as large ascrew integration, none that will fundamentally change howthe package operates.crew packageintar_make() (#753).crew itself is still inits early stages and currently lacks the launcher plugins to match theclustermq andfuture backends, but long-term,crew will be the predominant high-performance computingbackend.store_copy_object() to the store class toenable"fst_dt" and other formats to make deep copies whenneeded (#1041,copy argument to allowtar_format() formats to set thestore_copy_object() method (#1041,tar_format() whendefault methods are used.change_directory argument totar_source() (#1040,format = "url" targets, implement retries andtimeouts when connecting to URLs. The default timeout is 10 seconds, andthe default retry interval is 1 second. Both are configurable viatar_resources_url() (#1048).parallelly::freePort() intar_random_port().tar_script()example pipeline (#1033,tar_destroy() help file (#988,destroy = "user" intar_destroy().#!/bin/sh line to the top of SLURMclustermq template file (#944, #955,tar_path_script().tar_store() totar_path_store()with deprecation.tar_path() totar_path_target()with deprecation.tar_path_script_support().tar_option_set() now supports aseed argument,and target-specific seeds are determined bytar_option_get("seed") and the target name.tar_option_set(seed = NA) disables seed-setting behaviorbut forcibly invalidates all the affected targets except whenseed isFALSE in the target’star_cue() (#882,seed argument intar_cue() tocontrol whether targets update in response to changing orNA seeds (#882,tar_github_actions() workflow file to use@v2 (#960,callr_function isNULL (#961)."feather","parquet","file", and"url" work witherror = "null" (#969)."keras" and"torch"superseded bytar_format(). Documented in thetar_target() help file."keras" and"torch"incompatible witherror = "null". Documented in thetar_target() help file and in a warning thrown bytar_target() viatar_target_raw().convert argument totar_format() toallow customstore_convert_object() methods (#970).any_of() instead ofall_of() in teststo ensure compatibility withtidyselect 1.1.2.9000 (#928,@hadley).run.R fromuse_targets()executable (#929,#!/usr/bin/env Rscript to the top ofrun.R fromuse_targets() (#929,skip_on_cran() to avoidhttps://github.com/r-lib/testthat/issues/1470#issuecomment-1248145555.names argument oftar_make() does not identify any such targets in thepipeline (#923,.packageName,.__NAMESPACE__., and.__S3MethodsTable__. when importing objects from packageswith theimports option oftar_option_set().imports option oftar_option_set() (#926,tar_read() andtar_load() when the data store is missing.command column oftar_manifest()output, separate lines with “” instead of “\n” so the text output isstraightforward to work with.drop_missing argument totar_manifest() to hide/show columns with allNA values.paws functions via... intar_resources_aws() (#855,tar_source() to conveniently source R scripts(e.g. in_targets.R).targets messages the default themecolor, and color warnings and errors red (#856,use_targets().tar_option_get("resources") (#892). See the revised"Resources" section of thetar_resources()help file for details.legend andcolor to furtherconfiguretar_mermaid() (#848,use_targets()now creates ajob.sh script to run the pipeline as acluster job (#839).use_targets(). Avoidsdefining a global variable for the file.use_targets()_targets.R file.tar_mermaid() graph ordering.tar_mermaid() graphs to avoid JavaScript keywords.data.table::fread() with encoding equal togetOption("encoding") if available (#814,data.tablesupports.use_targets() now writes a_targets.R filetailored to the project in the current working directory (#639,use_targets() touse_targets_rmd().getOption("OutDec") is not"." to prevent time stamps from being corrupted (#433,@jarauh).tar_load_everything() to quicklyload all targets (#823,tar_target(..., repository = "gcp") (#720,R/utils_gcp.Rmermaid.js static graphs withtar_mermaid() (#775,tar_target(..., error = "null")to allowerrored targets to returnNULL and continue (#807,tar_assert_finite().tar_destroy(),tar_delete(), andtar_prune() now attempt to delete cloud data for theappropriate targets (#799). In addition,tar_exist_objects() andtar_objects() nowreport about target data in the cloud when applicable. Add a newcloud argument to each function to optionally suppress thisnew behavior.zoom_speed argument totar_visnetwork() andtar_glimpse() (#749,@dipterix)."verbose","verbose_positives","timestamp", and"timesamp_positives"reporters."aws_*" storage format values in favor ofa newrepository argument (#803). In other words,tar_target(..., format = "aws_qs") is nowtar_target(..., format = "qs", repository = "aws"). Andinternally, storage classes with multiple inheritance are createddynamically as opposed to having hard-coded source files. All this pavesthe way to add new cloud storage platforms without combinatorialchaos."tar_nonexportable" toformat = "aws_keras" andformat = "aws_torch"stores.tar_make_interactive_load_target().tar_target(format = tar_format(...)) (#736).tar_call() to return thetargets function currently running (from_targets.R or a target).tar_active() to tell whether thepipeline is currently running. Detects if it is called fromtar_make() or similar function.Sys.getenv("TAR_PROJECT") to the output oftar_envvars().store field oftar_runtime priorto sourcing_targets.R sotar_store() works intarget scripts.tar_envvars() to targets run on parallel workers.format = "file" targets to returncharacter(0) (#728,git checkout adifferent branch of your code and all you targets will stay up todate.paws (#711).region argument totar_resources_aws() to allow the user to explicitly declarea region for each AWS S3 buckets ("bucket=BUCKET:region=REGION", whereBUCKET isthe user-supplied bucket name andREGION is theuser-supplied region name. The newtargets isback-compatible with the old metadata format, but if you run thepipeline withtargets >= 0.8.1.9000 and then downgradetotargets <= 0.8.1, any AWS targets will break.timestamp_positives" and"verbose_positives" that omit messages for skipped targets(@psanker,#683).tar_assert_file().tar_reprex() for creating easier reproducibleexamples of pipelines.tar_store() to get the path to the store ofthe currently running pipeline (#714,_targets/user/ folder toencouragegittargets users to put custom files there fordata version control.tar_path() uses the current store path of thecurrently running pipeline instead oftar_config_get("store") (#714,.gitignore file inside the datastore to allow the metadata to be committed to version control moreeasily (#685, #711).tar_target() andtar_target_raw() (target_should_run.tar_builder(). These kinds of errorssometimes come up with AWS storage._targets/.gitignore for new data stores sothe user can delete the.gitignore file without itmysteriously reappearing (#685).strict andsilent to allowtar_load() andtar_load_raw() to bypasstargets that cannot be loaded.tidyselect docs intar_make()(#640,tar_dir() intar_test() (#642,tar_assert_target_list() error message (tar_destroy() and related cleanupfunctions (tar_target(target_name, ..., format = "aws_file").Previously,_targets/objects/target_name was also hashed ifit existed.tar_config_unset() function to deleteone or more configuration settings from the YAML configurationfile.TAR_CONFIG environment variable to setthe default file path of the YAML configuration file with projectsettings (#622,TAR_CONFIG is notset, the file path is still_targets.yaml.config package) and support theTAR_PROJECTenvironment variable to select the current active project for a given Rsession. The old single-project format is gracefully deprecated (#622,@yyzeng,retrieval = "none" andstorage = "none" to anticipate loading/saving targets fromother languages, e.g. Julia (tar_definition() function to get the targetdefinition object of the current target while that target is running ina pipeline.tar_path() now returnsthe path to the staging file instead of_targets/objects/target_name. This ensures you can stillwrite totar_path() instorage = "none"targets and the package will automatically hash the right file andupload it to the cloud. (This behavior does not apply to formats"file" and"aws_file", where it is nevernecessary to setstorage = "none".)eval(parse(text = ...), envir = tar_option_set("envir")instead ofsource() in the_targets.R file forTarget Markdown.RecordBatch andTable (knitr load the Target Markdown engine (#469,knitr version is now1.34.tar_resources_future() help file, encourage theuse ofplan to specify resources.error = "continue" does not cause erroredtargets to haveNULL values.knitr engine).poll_connection,stdout, andstderr arguments ofcallr::r_bg() intar_watch() (tar_started(),tar_skipped(),tar_built(),tar_canceled(), andtar_errored().tar_interactive(),tar_noninteractive(), andtar_toggle() todifferentially suppress code in non-interactive and interactive mode inTarget Markdown (#607,future errors within targets (#570,messageknitr chunk option isFALSE (#574,tar_interactive is not set,choose interactive vs non-interactive mode based onisTRUE(getOption("knitr.in.progress")) instead ofinteractive().tar_poll() to lose and then regain connection tothe progress file.tar_group column ofiteration = "group" data frames do not invalidate slices(#507,tar_interactive globaloption to select interactive mode or non-interactive mode (#469).degree_from anddegree_to oftar_visnetwork() andtar_glimpse() (#474,tar_config_set() (#476).tar_script chunk option in Target Markdown tocontrol where the{targets} language engine writes thetarget script and helper scripts (#478).script andstore tochoose custom paths to the target script file and data store forindividual function calls (#477).targets backends. Unavoidably, the path gets reset to_targets.yaml when the session restarts._targets.yaml config optionsreporter_make,reporter_outdated, andworkers to control function argument defaults shared acrossmultiple functions called outside_targets.R (#498,tar_load_globals() for debugging, testing,prototyping, and teaching (#496,resources argument oftar_target() to avoid conflicts among formats and HPCbackends (#489). Includes user-side helper functions liketar_resources() andtar_resources_aws() tobuild the required data structures._targets/meta/progress anddisplay then intar_progress(),tar_poll(),tar_watch(),tar_progress_branches(),tar_progress_summary(), andtar_visnetwork()(#514). Instead of writing each skip line separately to_targets/meta/progress, accumulate skip lines in a queueand then write them all out in bulk when something interesting happens.This avoids a lot of overhead in certain cases.shortcut argument totar_make(),tar_make_clustermq(),tar_make_future(),tar_outdated(), andtar_sitrep() to moreefficiently skip parts of the pipeline (#522, #523,names andshortcut in graph dataframes and graph visuals (#529).allow andexclude to the networkbehind the graph visuals rather than the visuals themselves (#529).tar_watch() app toshow verbose progress info and metadata.workspace_on_error argument oftar_option_set() to supersedeerror = "workspace". Helps control workspace behaviorindependently of theerror argument oftar_target() (#405, #533, #534,error = "abridge" intar_target() and related functions. If a target errors outwith this option, the target itself stops, any currently running targetskeeps, and no new targets launch after that (#533, #534,tar_destroy() which can besuppressed withTAR_ASK = "false" (#542,tar_older() andtar_newer() to help users identify and invalidate targetsat regular times or intervals.targets chunk optionin favor oftar_globals (#469).error = "workspace" intar_target() and related functions. Usetar_option_set(workspace_on_error = TRUE) instead (#405,#533,clustermq worker (store_sync_file_meta.default() on small files.tar_watch(), take several measures to avoid longcomputation times rendering the graph:display anddisplays totar_watch() so the user can select which display showsfirst."summary" the default display instead of"graph".outdated toFALSE by default.tar_read() for targets withformat = "aws_file", download the file back to the path theuser originally saved it when the target ran.TAR_MAKE_REPORTER environment variable withtargets::tar_config_get("reporter_make").eval(parse(text = readLines("_targets.R")), envir = some_envir)and related techniques instead of the less controllablesource(). Expose anenvir argument to manyfunctions for further control over evaluation ifcallr_function isNULL.out.attrs when hashing groups of data frames toextend #507 toexpand.grid() (#508).targets.GITHUBPAT toGITHUB_TOKEN in thetar_github_actions() YAML file (#554,eval chunk option in Target Markdown (#552,@fkohrt).time column for allbuilder targets, regardless of storage format._targets.yaml toparallel workers.exclude argument totar_watch() andtar_watch_server() (#458,@gorkang)..gitignore file to ignore everything in_targets/meta/ except.gitignore and_targets/meta/meta.knitr engines for pipelineconstruction and prototyping from within literate programming documents(#469,@cderv,knitr, and ultimately circling me back to asuccessful approach.use_targets(), which writes the TargetMarkdown template to the project root (#469).tar_unscript() to clean up scripts written byTarget Markdown.tar_make() andtar_manifest().pattern = slice() orpattern = sample() areinvalid.tar_target_raw(), assert that commands have length 1when converted to expressions.tar_cue() (dplyr groups and"grouped_df" classintar_group() (tarchetypes discussion #53,@kendonB).tar_read() andtar_read_raw()._targets.yaml). Fixes CRAN check errors from version0.4.1.roxygen2 docstrings fromshiny.Suggests: packages.targets.yaml inthecallr process.file.rename() errors when migrating stagedtemporary files (#410).assert_df() fromstore_assert_format() instead ofstore_cast_object(). And now those last two functions arenot called at all if the target throws an error.tar_poll() at the same time as the pipeline (#393).tar_renv() to_targets_packages.R (#397).outdated = FALSE intar_visnetwork().tar_timestamp() andtar_timestamp_raw() to get the last modified timestamp of atarget’s data (#378).tar_progress_summary() to compactly summarizeall pipeline progress (#380).characters argument oftar_traceback() to cap the traceback line lengths(#383).tar_watch()(#382).tar_poll() to repeatedly poll runtimeprogress in the R console (#381).tar_poll() is alightweight alternative totar_watch().tar_envvar() function to list values of specialenvironment variables supported intargets. The help fileexplains each environment variable in detail._targets.yaml (#297). New functionstar_config_get() andtar_config_set() interactwith the_targets.yaml file. Currently only supports thestore field to set the data store path to something otherthan_targets/.deployment = "main" (#398, #399, #404,tar_traceback() (#383).tar_watch(), useshinybusy instead ofshinycssloaders and keep current output on display whilenew output is rendering (#386,AWS_DEFAULT_REGION environment variable(check_region = TRUE; #400,tar_meta(), returnPOSIXct times in thetime zone of the calling system (#131).qs::qread() now thatqs 0.24.1 requiresstringfish >= 1.5.0(#147,@glep).pattern = slice(...)can take multiple indexes (#406, #419,queue$enqueue() is nowqueue$prepend() andalways appends to the front of the queue (#371).devtools::load_all() or similar isdetected inside_targets.R (#374).feather andparquet tests onCRAN.backoff option intar_option_set()to set the maximum upper bound (seconds) for the polling interval(#333).tar_github_actions() function to write aGitHub Actions workflow file for continuous deployment of data analysispipelines (#339,TAR_MAKE_REPORTER environment variable toglobally set the reporter of thetar_make*() functions(#345,tar_make_clustermq() andtar_make_future() (#333).tar_make_future(), try to submit a target every timea worker is polled.tar_make_future(), poll workers in order of targetpriority.targets internal objects out of the environment in order toavoid accidental massive data transfers to workers.rlang::check_installed() insideassert_package() (#331,tar_destroy(destroy = "process").tar_watch(), increase defaultsecondsto 15 (previously 5).tar_watch(), debounce instead of throttleinputs.tar_watch(), add an action button to refresh theoutputs.tar_make(). Will helpcompute a cache key on GitHub Actions and similar services.tar_deduplicate() due to the item above.tar_target_raw(),tar_meta(), andtar_seed() (#357,%||% and%|||% toconform to historical precedent.reporter = "silent"(#364,envirelement.tar_load(), subset metadata to avoid accidentalattempts to load global objects intidyselect calls.vctrs::vec_c() (#320,names argument totar_objects()andtar_workspaces() withtidyselectfunctionality.targets version) in_targets/meta/process andwrite new functionstar_process() andtar_pid() to retrieve the data (#291, #292).targets_only argument totar_meta().tar_helper() andtar_helper_raw() to write general-purpose R scripts, usingtidy evaluation for as a template mechanism (#290, #291, #292,#306).tar_exist_meta(),tar_exist_objects(),tar_exist_progress(),tar_exist_progress(),tar_exist_script()(#310).supervise argument totar_watch().complete_only argument totar_meta() to optionally return only complete rows (noNA values).callr errors and refer users to the debuggingchapter of the manual.crayon if an only if thecalling process is interactive (#302,options(crayon.enabled = FALSE) in_targets.R.format = "url"when the HTTP response status code is not 200 (#303,extras packages totar_renv() (tosupporttar_watch()).tar_watch() if_targets.R does not exist.names argument oftar_load() (#314,nobody in customcurlhandles (#315,targets is somehow activelymonitoring each job, e.g. through a connection or heartbeat (#318).errormode = "warn" ingetVDigest() forfiles to work around https://github.com/eddelbuettel/digest/issues/49for network drives on Windows.targets already runs thosefile checks anyway. (#316,targets tried to load from.tar_test() now skips all tests on Solaris in order tofix the problems shown on the CRAN check page.allow andexclude to work onimports intar_visnetwork() andtar_glimpse().visNetwork legends on right to avoid crowding thegraph.force() on subpipeline objects to eliminatehigh-memory promises in target objects. Allows targets to be deployed toworkers much faster whenretreival is"main"(#279).tar_watch() app to tabulateprogress on dynamic branches (#273,type,parent, andbranches in progress data fortar_watch()(#273,fields argument intar_progress()and default to"progress" for back compatibility (#273,tar_progress_branches() function to tabulatebranch progress (#273,tar_watch() to toggleautomatic refreshing and force a refresh..Random.seed by default intar_visnetwork().tar_watch()app.clustermq tests on Solaris.if(FALSE) blocks from help files to fix“unexecutable code” warnings (tar_glimpse(),tar_visnetwork(), andtar_watch()).tar_edit(),tar_watch_ui(), andtar_watch_server()).tar_workspace().)CITATION._targets.R(#253).tar_pipeline() andtar_bind()because of the above (#253).visNetwork stabilization (#264,visNetwork font size.error is"continue" (#267,tar_bind() (#245,igraph topologicalsort.tar_manifest() (#263,@sctyner).workspaces argument totar_option_set() to specify which targets will save theirworkspace files duringtar_make() (#214).error = "save" toerror = "workspace" to so it is clearer that savingworkspaces no longer duplicates data (#214).what todestroy intar_destroy().tar_undebug() because is redundant withtar_destroy(destroy = "workspaces").head(),tail(), andsample() to provide functionalityequivalent todrake’smax_expand (#56).tar_pattern() function to emulate dynamicbranching outside a pipeline.level_separation argument totar_visnetwork() andtar_glimpse() to controlthe aspect ratio (#226).importsargument totar_option_set() (#239).outdated isFALSE intar_visnetwork().tar_visnetwork() to try to account forcolor blindness.tar_manifest().tar_renv() now invokes_targets.R througha background process just liketar_outdated() etc. so itcan account for more hidden packages (#224,deployment equal to"main" for alltargets intar_make(). This ensurestar_make()does not waste time waiting for nonexistent files to ship over anonexistent network file system (NFS).tar_make_clustermq()ortar_make_future() could use NFS, so they still leavedeployment alone.size field to the metadata to allowtargets to make better judgments about when to rehash files(#180). We now compare hashes to check file size differences instead ofdoing messy floating point comparisons with ad hoc tolerances. It breaksback compatibility with old projects, but the error message isinformative, and this is all still before the first officialrelease.storage,retrieval, anddeployment settings (#183,garbage_collection to a target-level setting,i.e. argument totar_target() andtar_option_set() (#194). Previously was an argument to thetar_make*() functions.tar_name() andtar_path() to runoutside the pipeline with debugging-friendly default return values.storage is"remote" (#182,target$subpipeline rather thantarget$cache to make that happen (#209,tar_bind() to combine pipelineobjects.tar_seed() to get the random number generator seedof the target currently running.future::plan()s through theresources argument oftar_target() (#198,library() instead ofrequire() incommand_load_packages().targets$cache$targets$envir to improve convenience ininteractive debugging (ls() just works now.) This isreasonably safe now that the cache is populated at the last minute andcleared as soon as possible (#209, #210).