# Make sure you run at least step 1 + step 2 before this
# the input for this optional step is a list of pathway names
# that you find in res.wp.df table
# the idea is that you find all genes that are associated
# with the pathways, make one PPI network, visualize the data
# and find drug targets
# so instead of finding the module from the large network,
# you define the module based on the pathways of interest
# #############################################
# GET GO TERM
# #############################################
library(tidyr)
##
## Attaching package: 'tidyr'
## The following object is masked from 'package:S4Vectors':
##
## expand
# Check if Cytoscape is running
cytoscapePing()
## You are connected to Cytoscape!
# look up pathway names in the enrichment result tables - you can add more
# in the vector if you need to
# these pathways are from the lung cancer practical - replace with pathways
# from your breast cancer analysis!
pathways <- pathways.stepeight
geneSets <- res.wp@geneSets
genes <- geneSets[names(geneSets) %in% pathways]
# long format first: Gene - Pathway
gene_pathway_df <- do.call(rbind, lapply(names(genes), function(pw) {
data.frame(Pathway = pw, Gene = genes[[pw]], stringsAsFactors = FALSE)
}))
pathway.genes <- gene_pathway_df %>%
dplyr::mutate(Present = 1) %>%
tidyr::pivot_wider(names_from = Pathway, values_from = Present, values_fill = 0)
# add NumPathways column: count how many pathways each gene appears in
pathway.genes <- pathway.genes %>%
mutate(NumPathways = rowSums(across(all_of(pathways))))
# reorder columns: Gene, N_Pathways, then pathways
pathway.genes <- pathway.genes %>%
select(Gene, NumPathways, all_of(pathways))
# view result
head(pathway.genes)
## # A tibble: 6 × 7
## Gene NumPathways WP_CELL_CYCLE WP_G1_TO_S_CELL_CYCL…¹ WP_CHEMOKINE_SIGNALING WP_RAS_SIGNALING WP_INSULIN_SIGNALING
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ENSG00000… 2 1 0 0 1 0
## 2 ENSG00000… 1 1 0 0 0 0
## 3 ENSG00000… 1 1 0 0 0 0
## 4 ENSG00000… 1 1 0 0 0 0
## 5 ENSG00000… 1 1 0 0 0 0
## 6 ENSG00000… 1 1 0 0 0 0
## # ℹ abbreviated name: ¹WP_G1_TO_S_CELL_CYCLE_CONTROL
query <- format_csv(as.data.frame(pathway.genes$Gene), col_names=F, escape = "double", eol =",")
commandsPOST(paste0('string protein query cutoff=0.9 newNetName="PPI network" query="',query,'" limit=0 species="Homo sapiens"'))
## SUID
## 508305
analyzeNetwork()
## networkTitle nodeCount
## "STRING network - PPI network - 3 (undirected)" "546"
## edgeCount avNeighbors
## "4477" "17.41634241245136"
## diameter radius
## "11" "6"
## avSpl cc
## "3.2834171464112076" "0.49373196547372655"
## density heterogeneity
## "0.03394998520945684" "0.8333075774613777"
## centralization ncc
## "0.11660118177387914" "32"
## time
## "0.179"
RCy3::loadTableData(data=data, data.key.column = "GeneID", table = "node", table.key.column = "query term")
## [1] "Success: Data loaded in defaultnode table"
RCy3::loadTableData(data=pathway.genes, data.key.column = "Gene", table = "node", table.key.column = "query term")
## [1] "Success: Data loaded in defaultnode table"
# VISUALIZATION 1
# fill color = log2FC gradient
# green border = significance
RCy3::createVisualStyle("log2FC vis")
RCy3::setNodeLabelMapping("display name", style.name = "log2FC vis")
## NULL
control.points <- c (-3.0, 0.0, 3.0)
colors <- c ('#5588DD', '#FFFFFF', '#DD8855')
setNodeColorMapping("log2FC", control.points, colors, style.name = "log2FC vis", default.color = "#C0C0C0")
## NULL
RCy3::setEdgeColorDefault("#CCCCCC", style.name = "log2FC vis")
RCy3::setVisualStyle("log2FC vis")
## message
## "Visual Style applied."
RCy3::lockNodeDimensions("TRUE", "log2FC vis")
# Select significant genes and change border color
x <- RCy3::createColumnFilter('adj.P.Value', 'adj.P.Value', 0.05, "LESS_THAN")
## No edges selected.
RCy3::setNodeBorderColorBypass(x$nodes, new.colors = "#009900")
RCy3::setNodeBorderWidthBypass(x$nodes, new.sizes = 7)
RCy3::clearSelection
## function (type = "both", network = NULL, base.url = .defaultBaseUrl)
## {
## net.SUID <- getNetworkSuid(network, base.url)
## if (type %in% c("nodes", "both")) {
## resource.uri <- res <- cyrestPUT(paste("networks", net.SUID,
## "tables/defaultnode/columns/selected", sep = "/"),
## parameters = list(default = "false"), base.url = base.url)
## }
## if (type %in% c("edges", "both")) {
## res <- cyrestPUT(paste("networks", net.SUID, "tables/defaultedge/columns/selected",
## sep = "/"), parameters = list(default = "false"),
## base.url = base.url)
## }
## invisible(res)
## }
## <bytecode: 0x55727f3bf5d8>
## <environment: namespace:RCy3>
exportImage(paste0(out.folder,'selected-pathways-PPI.png'), type='PNG', zoom=500) #.png; use zoom or width args to increase size/resolution
## file
## "/home/peipr/gits/BBS2061-breast-cancer/scripts/../output/selected-pathways-PPI.png"
# ==================================================================
# Extend the process PPI with known drug-target interactions from DrugBank
# ==================================================================
unzip(system.file("extdata","drugbank-5.1.0.xgmml.zip", package="rWikiPathways"), exdir = getwd())
drugbank <- file.path(getwd(), "drugbank-5.1.0.xgmml")
commandsRun(paste0('cytargetlinker extend idAttribute="GeneID" linkSetFiles="', drugbank, '"') )
## [1] "Extension step: 1" "Linkset: DrugBank_v5.1.0 (approved)" "Added edges: 378"
## [4] "Added nodes: 196"
commandsRun('cytargetlinker applyLayout network="current"')
my.drugs <- selectNodes("drug", by.col = "CTL.Type", preserve = FALSE)$nodes #easy way to collect node SUIDs by column value
clearSelection()
setNodeColorBypass(my.drugs, "#DD99FF")
setNodeShapeBypass(my.drugs, "hexagon")
drug.labels <- getTableColumns(columns=c("SUID","CTL.label"))
drug.labels <- na.omit(drug.labels)
mapply(function(x,y) setNodeLabelBypass(x,y), drug.labels$SUID, drug.labels$CTL.label)
## [[1]]
## NULL
##
## [[2]]
## NULL
##
## [[3]]
## NULL
##
## [[4]]
## NULL
##
## [[5]]
## NULL
##
## [[6]]
## NULL
##
## [[7]]
## NULL
##
## [[8]]
## NULL
##
## [[9]]
## NULL
##
## [[10]]
## NULL
##
## [[11]]
## NULL
##
## [[12]]
## NULL
##
## [[13]]
## NULL
##
## [[14]]
## NULL
##
## [[15]]
## NULL
##
## [[16]]
## NULL
##
## [[17]]
## NULL
##
## [[18]]
## NULL
##
## [[19]]
## NULL
##
## [[20]]
## NULL
##
## [[21]]
## NULL
##
## [[22]]
## NULL
##
## [[23]]
## NULL
##
## [[24]]
## NULL
##
## [[25]]
## NULL
##
## [[26]]
## NULL
##
## [[27]]
## NULL
##
## [[28]]
## NULL
##
## [[29]]
## NULL
##
## [[30]]
## NULL
##
## [[31]]
## NULL
##
## [[32]]
## NULL
##
## [[33]]
## NULL
##
## [[34]]
## NULL
##
## [[35]]
## NULL
##
## [[36]]
## NULL
##
## [[37]]
## NULL
##
## [[38]]
## NULL
##
## [[39]]
## NULL
##
## [[40]]
## NULL
##
## [[41]]
## NULL
##
## [[42]]
## NULL
##
## [[43]]
## NULL
##
## [[44]]
## NULL
##
## [[45]]
## NULL
##
## [[46]]
## NULL
##
## [[47]]
## NULL
##
## [[48]]
## NULL
##
## [[49]]
## NULL
##
## [[50]]
## NULL
##
## [[51]]
## NULL
##
## [[52]]
## NULL
##
## [[53]]
## NULL
##
## [[54]]
## NULL
##
## [[55]]
## NULL
##
## [[56]]
## NULL
##
## [[57]]
## NULL
##
## [[58]]
## NULL
##
## [[59]]
## NULL
##
## [[60]]
## NULL
##
## [[61]]
## NULL
##
## [[62]]
## NULL
##
## [[63]]
## NULL
##
## [[64]]
## NULL
##
## [[65]]
## NULL
##
## [[66]]
## NULL
##
## [[67]]
## NULL
##
## [[68]]
## NULL
##
## [[69]]
## NULL
##
## [[70]]
## NULL
##
## [[71]]
## NULL
##
## [[72]]
## NULL
##
## [[73]]
## NULL
##
## [[74]]
## NULL
##
## [[75]]
## NULL
##
## [[76]]
## NULL
##
## [[77]]
## NULL
##
## [[78]]
## NULL
##
## [[79]]
## NULL
##
## [[80]]
## NULL
##
## [[81]]
## NULL
##
## [[82]]
## NULL
##
## [[83]]
## NULL
##
## [[84]]
## NULL
##
## [[85]]
## NULL
##
## [[86]]
## NULL
##
## [[87]]
## NULL
##
## [[88]]
## NULL
##
## [[89]]
## NULL
##
## [[90]]
## NULL
##
## [[91]]
## NULL
##
## [[92]]
## NULL
##
## [[93]]
## NULL
##
## [[94]]
## NULL
##
## [[95]]
## NULL
##
## [[96]]
## NULL
##
## [[97]]
## NULL
##
## [[98]]
## NULL
##
## [[99]]
## NULL
##
## [[100]]
## NULL
##
## [[101]]
## NULL
##
## [[102]]
## NULL
##
## [[103]]
## NULL
##
## [[104]]
## NULL
##
## [[105]]
## NULL
##
## [[106]]
## NULL
##
## [[107]]
## NULL
##
## [[108]]
## NULL
##
## [[109]]
## NULL
##
## [[110]]
## NULL
##
## [[111]]
## NULL
##
## [[112]]
## NULL
##
## [[113]]
## NULL
##
## [[114]]
## NULL
##
## [[115]]
## NULL
##
## [[116]]
## NULL
##
## [[117]]
## NULL
##
## [[118]]
## NULL
##
## [[119]]
## NULL
##
## [[120]]
## NULL
##
## [[121]]
## NULL
##
## [[122]]
## NULL
##
## [[123]]
## NULL
##
## [[124]]
## NULL
##
## [[125]]
## NULL
##
## [[126]]
## NULL
##
## [[127]]
## NULL
##
## [[128]]
## NULL
##
## [[129]]
## NULL
##
## [[130]]
## NULL
##
## [[131]]
## NULL
##
## [[132]]
## NULL
##
## [[133]]
## NULL
##
## [[134]]
## NULL
##
## [[135]]
## NULL
##
## [[136]]
## NULL
##
## [[137]]
## NULL
##
## [[138]]
## NULL
##
## [[139]]
## NULL
##
## [[140]]
## NULL
##
## [[141]]
## NULL
##
## [[142]]
## NULL
##
## [[143]]
## NULL
##
## [[144]]
## NULL
##
## [[145]]
## NULL
##
## [[146]]
## NULL
##
## [[147]]
## NULL
##
## [[148]]
## NULL
##
## [[149]]
## NULL
##
## [[150]]
## NULL
##
## [[151]]
## NULL
##
## [[152]]
## NULL
##
## [[153]]
## NULL
##
## [[154]]
## NULL
##
## [[155]]
## NULL
##
## [[156]]
## NULL
##
## [[157]]
## NULL
##
## [[158]]
## NULL
##
## [[159]]
## NULL
##
## [[160]]
## NULL
##
## [[161]]
## NULL
##
## [[162]]
## NULL
##
## [[163]]
## NULL
##
## [[164]]
## NULL
##
## [[165]]
## NULL
##
## [[166]]
## NULL
##
## [[167]]
## NULL
##
## [[168]]
## NULL
##
## [[169]]
## NULL
##
## [[170]]
## NULL
##
## [[171]]
## NULL
##
## [[172]]
## NULL
##
## [[173]]
## NULL
##
## [[174]]
## NULL
##
## [[175]]
## NULL
##
## [[176]]
## NULL
##
## [[177]]
## NULL
##
## [[178]]
## NULL
##
## [[179]]
## NULL
##
## [[180]]
## NULL
##
## [[181]]
## NULL
##
## [[182]]
## NULL
##
## [[183]]
## NULL
##
## [[184]]
## NULL
##
## [[185]]
## NULL
##
## [[186]]
## NULL
##
## [[187]]
## NULL
##
## [[188]]
## NULL
##
## [[189]]
## NULL
##
## [[190]]
## NULL
##
## [[191]]
## NULL
##
## [[192]]
## NULL
##
## [[193]]
## NULL
##
## [[194]]
## NULL
##
## [[195]]
## NULL
##
## [[196]]
## NULL
# Try different layouts (e.g. yFiles organic layout) if nodes are overlapping too much
# Cytoscape > Layout menu!
exportImage(paste0(out.folder,'selected-pathways-PPI-with-drugs.png'), type='PNG', zoom=500) #.png; use zoom or width args to increase size/resolution
## file
## "/home/peipr/gits/BBS2061-breast-cancer/scripts/../output/selected-pathways-PPI-with-drugs.png"
# ==================================================================
# SAVING CYTOSCAPE SESSION
# ==================================================================
saveSession(paste0(out.folder,'selected-pathways-PPI.cys'))
## OPTIONAL - FILTER network to only include drugs + targets
selectNodes(my.drugs)
## $nodes
## [1] 570359 570872 569849 570353 570866 569843 570887 569867 570371 570905 569882 570383 570896 569873 570410 569900
## [17] 570926 569888 570914 570404 569894 570935 569912 570428 569918 570416 569927 570434 570950 569945 570458 570959
## [33] 570449 569939 569450 570986 569963 569951 570980 569957 569975 571004 570485 570998 571016 570506 570497 569987
## [49] 571031 570011 570524 570512 570005 570518 570536 570026 569516 569504 571040 570530 570020 569510 571046 570551
## [65] 569528 571067 570044 569534 570545 569522 571061 570038 571079 570056 569546 570572 570062 571073 570563 569540
## [81] 570071 570584 569564 570077 570590 569552 570578 569558 570599 569579 570605 569570 571109 569591 570104 570620
## [97] 569597 570110 570095 569585 570611 571124 570632 569609 571145 570125 570638 569603 571139 570116 571160 569627
## [113] 569615 571154 570131 570644 569621 569639 571181 570158 570143 569633 570659 570149 570170 569660 571196 569648
## [129] 570164 570677 571190 569654 570185 569675 570701 569666 570179 570692 569687 570716 569693 570191 569681 570197
## [145] 570710 570728 569708 570221 570734 570722 569699 570212 570743 569720 570236 569726 569714 570230 569735 570248
## [161] 570254 570242 570758 570776 570266 569756 569744 570770 570260 569750 569768 570281 569774 570785 569762 570296
## [177] 569786 570812 570806 570824 569804 570830 569792 570818 569798 570329 570842 569822 569810 570323 570857 569834
## [193] 570347 570338 570851 569828
##
## $edges
## list()
selectFirstNeighbors()
## $nodes
## [1] 570359 570872 569849 536571 535536 570353 536561 570866 569843 534516 570887 569867 536576 570371 534531 536581
## [17] 570905 569882 536606 570383 536591 570896 569873 536081 570410 536106 569900 535596 536621 570926 569888 534561
## [33] 570914 535586 570404 569894 534566 570935 536631 569912 536121 534586 535611 570428 569918 570416 535601 535091
## [49] 569927 534601 536651 534606 535616 570434 536131 535621 570950 569945 570458 570959 570449 569939 534611 536681
## [65] 570986 569450 569963 569951 536161 534626 535651 570980 536676 569957 569975 571004 536176 534641 536691 535156
## [81] 570485 570998 534646 536711 571016 570506 536191 534656 570497 569987 571031 570011 570524 570512 535186 534676
## [97] 570005 570518 570536 570026 534186 569516 571040 569504 570530 570020 571046 569510 570551 569528 535736 571067
## [113] 570044 535741 569534 570545 536241 569522 571061 570038 571079 535751 570056 569546 536266 534731 570572 570062
## [129] 571073 535746 570563 569540 535236 534726 570071 570584 536281 535771 569564 570077 570590 536286 536271 569552
## [145] 570578 536276 569558 570599 569579 570605 534766 534751 569570 536291 571109 569591 570104 536826 570620 569597
## [161] 570110 535806 570095 534256 536816 569585 570611 571124 570632 535816 569609 571145 570125 570638 571139 569603
## [177] 535811 570116 535301 535831 571160 535321 569627 535836 535326 569615 571154 570131 570644 569621 569639 571181
## [193] 570158 570143 569633 570659 535331 536356 570149 535846 570170 569660 571196 569648 570164 570677 569654 571190
## [209] 570185 569675 570701 569666 570179 570692 569687 535386 570716 534876 569693 570191 534351 569681 535891 570197
## [225] 535381 570710 570728 569708 535916 570221 570734 570722 569699 570212 535396 570743 569720 536441 570236 569726
## [241] 569714 534386 570230 569735 570248 570254 534926 534911 535936 570242 570758 570776 570266 569756 534941 535966
## [257] 535951 569744 534416 570770 570260 569750 569768 570281 535466 569774 570785 569762 536486 570296 535481 569786
## [273] 536506 570812 535471 535986 570806 570824 569804 535501 570830 569792 570818 534466 535491 534981 569798 536006
## [289] 570329 570842 534491 535516 569822 535006 534991 569810 535506 570323 536021 570857 536041 569834 570347 536556
## [305] 534496 570338 536546 570851 569828 536036
##
## $edges
## list()
selected <- getSelectedNodes()
createSubnetwork("selected", "all")
## network
## 600263
RCy3::layoutNetwork()