## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", warning = FALSE, message = FALSE ) ## ----setup-------------------------------------------------------------------- library(dbparser) library(dplyr) ## ----parse-------------------------------------------------------------------- parse_record <- function(file_name) { parseDrugBank( db_path = system.file("extdata", file_name, package = "dbparser"), drug_options = NULL, parse_salts = FALSE, parse_products = FALSE, references_options = NULL, cett_options = c("targets", "enzymes") ) } lepirudin <- parse_record("drugbank_record_biotech.xml") bivalirudin <- parse_record("drugbank_record_small_molecule.xml") dbs <- list(lepirudin, bivalirudin) # Stack the same table from every parsed record stack_table <- function(getter) { bind_rows(lapply(dbs, function(db) getter(db))) } drugs <- stack_table(function(db) db$drugs$general_information) %>% select(drugbank_id, drug_name = name, type) drugs ## ----target_actions----------------------------------------------------------- target_actions <- stack_table(function(db) db$cett$targets$actions) target_actions ## ----pitfall------------------------------------------------------------------ targets <- stack_table(function(db) db$cett$targets$general_information) targets %>% select(drugbank_id, target_id, target_name = name) %>% inner_join(select(target_actions, -drugbank_id), by = "target_id") ## ----correct_join------------------------------------------------------------- drug_target_actions <- targets %>% select(drugbank_id, target_id, target_name = name, known_action) %>% inner_join(target_actions, by = c("drugbank_id", "target_id")) %>% inner_join(drugs, by = "drugbank_id") drug_target_actions ## ----genes-------------------------------------------------------------------- target_genes <- stack_table( function(db) db$cett$targets$polypeptides$general_information) %>% select(drugbank_id, target_id, uniprot_id = polypeptide_id, gene_name, cellular_location) drug_target_genes <- drug_target_actions %>% inner_join(target_genes, by = c("drugbank_id", "target_id")) %>% select(drug_name, target_name, gene_name, uniprot_id, action, known_action, cellular_location) drug_target_genes ## ----shared_mechanism--------------------------------------------------------- lepirudin_mechanism <- drug_target_genes %>% filter(drug_name == "Lepirudin") %>% distinct(gene_name, action) drug_target_genes %>% semi_join(lepirudin_mechanism, by = c("gene_name", "action")) %>% filter(drug_name != "Lepirudin") %>% select(drug_name, gene_name, action, known_action) ## ----profile------------------------------------------------------------------ cett_profile <- function(cett_type) { id_col <- paste0(sub("s$", "", cett_type), "_id") info <- stack_table(function(db) db$cett[[cett_type]]$general_information) acts <- stack_table(function(db) db$cett[[cett_type]]$actions) if (NROW(info) == 0 || NROW(acts) == 0) { return(NULL) } info %>% select(drugbank_id, cett_id = all_of(id_col), protein = name, known_action) %>% inner_join(rename(acts, cett_id = all_of(id_col)), by = c("drugbank_id", "cett_id")) %>% mutate(cett_type = cett_type) } profile <- bind_rows(cett_profile("targets"), cett_profile("enzymes")) %>% inner_join(drugs, by = "drugbank_id") %>% select(drug_name, cett_type, protein, action, known_action) profile