Concise Structure for Chainable Paths

Provides path_chain class and functions, which facilitates loading and saving directory structure in YAML configuration files via 'config' package. The file structure you created during exploration can be transformed into legible section in the config file, and then easily loaded for further usage.


path.chain

CRAN status Documentation AppVeyor buildstatus Buy hexstciker

Concise structure for chainable paths

Installation

path.chain is available on CRAN, so you can install it using simply:

install.packages('path.chain')

Dev version is available on GitHub:

# install.packages("devtools")
devtools::install_github("krzjoa/path.chain")

Example

If you are using RStudio, you know that among many excellent features of this IDE there is a path autocompletion.

rstudio

However, you can also meet situations, when that may be not enough. Most of all, I mean bigger projects, where you store a complex file structure in the config file. You can handle such configuration YAML file using the library named config. You may encounter a situation, when you’ll want to save current directory structure in this config.

Basic usage

library(magrittr)
library(path.chain)

# Create an example file stucture
tmp <- create_temp_dir("files")
create_sample_dir(tmp, override = TRUE)
#> [1] TRUE

# Sample structure we've already created looks as follows
fs::dir_tree(tmp)
#> /tmp/RtmpRSpDrI/files
#> ├── data
#> │   ├── example1.RData
#> │   ├── example2.RData
#> │   └── persons.csv
#> └── docs
#>     └── schema.txt

# Loading stucture
file.structure <- path_chain(tmp)
file.structure$data$example1.RData
#> [1] "files/data/example1.RData"

# Loading stucture with naming convention
file.structure <- path_chain(tmp, naming = naming_k)
file.structure$kData$kExample1
#> [1] "files/data/example1.RData"

# Saving file structure
file.structure %>% 
  as_config(root.name = "kRoot", wrap = "kDirs") %>%  # Required by `{config}` package
  yaml::write_yaml(temp_path("config.yaml"))
default:
  kDirs:
    kRoot: files/
    kData:
      kRoot: data/
      kExample1: kExample1
      kExample2: kExample2
      kPersons: kPersons
    kDocs:
      kRoot: docs/
      kSchema: kSchema

Loading config file

k.dirs <- config::get("kDirs", "default", temp_path("config.yaml")) %>% 
  as_path_chain()

class(k.dirs)
#> [1] "path_chain"

k.dirs$kData$.
#> [1] "files/data/"
k.dirs$kData$kExample1
#> [1] "files/data/example1.RData"

Path validation

on_path_not_exists(~ print("Path {.x} not exists"))
is_path_valid <- function(x) if (!grepl("\\.fst", x)) print("Invalid file")
on_validate_path(is_path_valid)

level2.b <- path_link("fileA.RData")
level2.a <- path_link("fileB.fst")
level1   <- path_link("data", list(level2.a = level2.a , level2.b = level2.b))
root     <- path_link("files", list(level1))

root$data$level2.a
#> [1] "Path {.x} not exists"
#> [1] "files/data/fileB.fst"
root$data$level2.b
#> [1] "Path {.x} not exists"
#> [1] "Invalid file"
#> [1] "files/data/fileA.RData"

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("path.chain")

1.0.0 by Krzysztof Joachimiak, 2 years ago


https://github.com/krzjoa/path.chain, https://krzjoa.github.io/path.chain/


Report a bug at https://github.com/krzjoa/path.chain/issues


Browse source code at https://github.com/cran/path.chain


Authors: Krzysztof Joachimiak [aut, cre] , Peter Wurm [ctb]


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports rlang, stringi

Suggests testthat, knitr, rmarkdown, config, yaml, fs, magrittr, logger


See at CRAN