Structured data (YAML, TOML, XML, RDS, FWF)

YAML

Files ending in .yaml or .yml are read with yaml. Nested structures are preserved when the output format supports nesting (JSON, YAML, TOML, XML, RDS); otherwise they are flattened.

Reading

rush run -n 'head(df)' config.yaml
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["config"]] <- rush::read("config.yaml")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

Writing

rush run -n -O yaml -o output.yaml 'df' data.csv
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output = "output.yaml",
#>   output_format = "yaml",
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.csv")
#> df <- dfs[[1]]
#> result <- df
#> 
#> rush::write(result)

Converting (nesting preserved)

rush convert -n -o output.yaml data.json
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output = "output.yaml",
#>   output_format = "yaml",
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.json")
#> df <- dfs[[1]]
#> result <- df
#> 
#> rush::write(result)

TOML

Files ending in .toml are read with RcppTOML:

Reading

rush run -n 'head(df)' config.toml
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["config"]] <- rush::read("config.toml")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

Writing

rush run -n -O toml -o output.toml 'df' data.csv
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output = "output.toml",
#>   output_format = "toml",
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.csv")
#> df <- dfs[[1]]
#> result <- df
#> 
#> rush::write(result)

XML

Files ending in .xml are read with xml2. Data frames are serialized as rows, with configurable element names.

Reading

rush run -n 'head(df)' data.xml
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.xml")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

Writing

rush run -n -O xml -o output.xml 'df' data.csv
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output = "output.xml",
#>   output_format = "xml",
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.csv")
#> df <- dfs[[1]]
#> result <- df
#> 
#> rush::write(result)

--output-root and --output-record

Customize the root and record element names (defaults: root and record):

rush run -n -O xml --output-root plants --output-record observation 'head(df)' data.csv
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output_format = "xml",
#>   dpi = 300L,
#>   output_root = "plants",
#>   output_record = "observation"
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.csv")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

RDS

R’s native serialisation format. Files ending in .rds are read with readr::read_rds() and written with readr::write_rds():

Reading

rush run -n 'head(df)' data.rds
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.rds")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

Writing

rush run -n -o output.rds 'df' data.csv
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   output = "output.rds",
#>   output_format = "rds",
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.csv")
#> df <- dfs[[1]]
#> result <- df
#> 
#> rush::write(result)

Fixed-width files (FWF)

Files ending in .fwf are read with readr::read_fwf(). Column positions are auto-detected. This format is read-only.

Reading

rush run -n 'head(df)' data.fwf
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["data"]] <- rush::read("data.fwf")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)

Using -F fwf for files without the .fwf extension

rush run -n -F fwf 'head(df)' legacy.txt
#> #!/usr/bin/env -S ir run
#> #| packages:
#> #|   - rush
#> 
#> rush::init(
#>   dpi = 300L
#> )
#> 
#> dfs <- list()
#> dfs[["legacy"]] <- rush::read("legacy.txt", format = "fwf")
#> df <- dfs[[1]]
#> result <- head(df)
#> 
#> rush::write(result)