knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Learn subprojects in pepr

This vignette will show you how and why to use the subbprojects functionality of the pepr package.

Problem/Goal

The example below demonstrates how and why to use implied attributes functionality to define numerous similar projects in a single project config file. This functionality is extremely convenient when one has to define projects with small settings discreptancies, like different attributes in the annotation sheet. For example libraries ABCD and EFGH instead of the original RRBS.

branch = "master"
library(knitr)
sampleAnnotation = system.file(
"extdata",
paste0("example_peps-", branch),
"example_subprojects1",
"sample_table.csv",
package = "pepr"
)
sampleAnnotationDF = read.table(sampleAnnotation, sep = ",", header = T)
knitr::kable(sampleAnnotationDF, format = "html") 

Solution

This can be achieved by using subprojects section of project_config.yaml file (presented below). The attributes specified in the lowest levels of this section (here: sample_table) overwrite the original ones. Consequently, a completely new set of settings is determined with just this value changed. Moreover, multiple subprojects can be defined in a single config file. Based on the file presented below, two subprojects will be defined: newLib and newLib2.

library(pepr)
projectConfig = system.file(
"extdata",
paste0("example_peps-", branch),
"example_subprojects1",
"project_config.yaml",
package = "pepr"
)
.printNestedList(yaml::read_yaml(projectConfig))

Obviously, the subprojects functionality can be combined with other pepr package options, e.g. implied and derieved attributes. The derived attributes functionality is used in the example considered here (derived_attributes and data_soures keys in the config file).

Files sample_table_newLib.csv and sample_table_newLib2.csv introduce different the library attributes. They are used in the subprojects newLib and newLib2, respectively.

library(knitr)
sampleAnnotation = system.file(
  "extdata",
  paste0("example_peps-", branch),
  "example_subprojects1",
  "sample_table_newLib.csv",
  package = "pepr"
  )
  sampleAnnotationDF = read.table(sampleAnnotation, sep = ",", header = T)
  knitr::kable(sampleAnnotationDF, format = "html") 
library(knitr)
sampleAnnotation = system.file(
"extdata",
paste0("example_peps-", branch),
"example_subprojects1",
"sample_table_newLib2.csv",
package = "pepr"
)
sampleAnnotationDF = read.table(sampleAnnotation, sep = ",", header = T)
knitr::kable(sampleAnnotationDF, format = "html") 

Code

Load pepr and read in the project metadata by specifying the path to the project_config.yaml:

library(pepr)
projectConfig = system.file("extdata", paste0("example_peps-", branch),"example_subprojects1", "project_config.yaml", package="pepr")
p=Project(projectConfig)

An appropriate message is displayed, which informs you what are the names of the subprojects that you have defined in the project_config.yaml file. Nontheless, just the main project is "active".

Let's inspect it:

samples(p)

The column file_path was derived and the library column holds the original attributes: RRBS for each sample.

To "activate" any of the subprojects just pass the name of the desired to the subproject argument in the Project object constructor.

In case you don't remember the subproject names run the listSubprojects() metohods on the Project object, just like that:

listSubprojects(p)
pNewLib = Project(file = projectConfig, subproject = "newLib")

Let's inspect it:

samples(pNewLib)

As you can see, the library columns consists of new attributes (ABCD), which were defined in the sample_table_newLib.csv file.

The second subproject can be activated in a similar way:

pNewLib2 = Project(file = projectConfig, subproject = "newLib2")
samples(pNewLib2)

What is more, the p object consists of all the information from the project config file (project_config.yaml). Run the following line to explore it:

config(p)


pepkit/pepr documentation built on Jan. 11, 2020, 11:06 a.m.