The R markdown is available from the pulldown menu for Code
at the upper-right, choose “Download Rmd”, or download
the Rmd from GitHub.
In addition to importing networks in network file formats, such as
sif and xgmml, Cytoscape also supports
importing networks from tabular data. In this vignette, the data table
represents protein-protein interaction data from a mass-spectrometry
experiment.
Installation
if(!"RCy3" %in% installed.packages()){
install.packages("BiocManager")
BiocManager::install("RCy3")
}
library(RCy3)
Getting started
First, launch Cytoscape and keep it running whenever using RCy3.
Confirm that you have everything installed and running:
cytoscapePing()
cytoscapeVersionInfo()
Background
The data used for this protocol represents interactions between human
and HIV proteins by Jäger et
al. In this quantitative AP-MS experiment, a relatively small number
of bait proteins were used to pull down a larger set of prey
proteins.
Note that this tutorial does not describe how to pre-process the raw
AP-MS data, the data used here is already scored and filtered.
Import Network
First let’s read in the example data file:
apms.data<-read.csv(file="https://raw.githubusercontent.com/cytoscape/cytoscape-automation/master/for-scripters/R/notebooks/AP-MS/ap-ms-demodata_simple.csv", stringsAsFactors = FALSE)
Now we can create a data frame for the network edges (interactions)
using the imported data. We can also add the AP-MS score from the data
as an edge attribute:
edges <- data.frame(source=apms.data[,"Bait"],target=apms.data[,"Prey"], AP.MS.Score=apms.data[,"AP.MS.Score"],stringsAsFactors=FALSE)
Finally, we use the edge data frame to create the network. Note that
we don’t need to define a data frame for nodes, as all nodes in this
case are represented in the edge data frame.
createNetworkFromDataFrames(edges=edges, title="apms network", collection = "apms collection")
The imported network consists of multiple smaller subnetworks, each
representing a bait node and its associated prey nodes.
Loading Data
There is one other column of data for the prey proteins that we want
to load into this network, the HEKScore.
In this data, the prey nodes are repeated for each interactions with
a Bait node, so the data contains different values for the same
attribute (for example HEKScore), for each Prey node. During import, the
last value imported will overwrite prior values and visualizations using
this attribute thus only shows the last value.
loadTableData(apms.data[,c("Prey","HEKScore")], data.key.column="Prey")
The imported network consists of multiple smaller subnetworks, each
representing a bait node and its associated prey nodes:
LS0tCnRpdGxlOiAiSW1wb3J0aW5nIE5ldHdvcmsgRnJvbSBUYWJsZSIKYXV0aG9yOiAiS3Jpc3RpbmEgSGFuc3BlcnMiCnBhY2thZ2U6IFJDeTMKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogIm5vbmUiCiMgIHBkZl9kb2N1bWVudDoKIyAgICB0b2M6IHRydWUgICAgCi0tLQpgYGB7ciwgZWNobyA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZXZhbD1GQUxTRQopCmBgYAoKKlRoZSBSIG1hcmtkb3duIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBwdWxsZG93biBtZW51IGZvciogQ29kZSAqYXQgdGhlIHVwcGVyLXJpZ2h0LCBjaG9vc2UgIkRvd25sb2FkIFJtZCIsIG9yIFtkb3dubG9hZCB0aGUgUm1kIGZyb20gR2l0SHViXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY3l0b3NjYXBlL2N5dG9zY2FwZS1hdXRvbWF0aW9uL21hc3Rlci9mb3Itc2NyaXB0ZXJzL1Ivbm90ZWJvb2tzL0ltcG9ydE5ldHdvcmtGcm9tVGFibGUuUm1kKS4qCgo8aHIgLz4KSW4gYWRkaXRpb24gdG8gaW1wb3J0aW5nIG5ldHdvcmtzIGluIG5ldHdvcmsgZmlsZSBmb3JtYXRzLCBzdWNoIGFzICoqc2lmKiogYW5kICoqeGdtbWwqKiwgQ3l0b3NjYXBlIGFsc28gc3VwcG9ydHMgaW1wb3J0aW5nIG5ldHdvcmtzIGZyb20gdGFidWxhciBkYXRhLiBJbiB0aGlzIHZpZ25ldHRlLCB0aGUgZGF0YSB0YWJsZSByZXByZXNlbnRzIHByb3RlaW4tcHJvdGVpbiBpbnRlcmFjdGlvbiBkYXRhIGZyb20gYSBtYXNzLXNwZWN0cm9tZXRyeSBleHBlcmltZW50LgoKIyBJbnN0YWxsYXRpb24KYGBge3J9CmlmKCEiUkN5MyIgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKSl7CiAgICBpbnN0YWxsLnBhY2thZ2VzKCJCaW9jTWFuYWdlciIpCiAgICBCaW9jTWFuYWdlcjo6aW5zdGFsbCgiUkN5MyIpCn0KbGlicmFyeShSQ3kzKQpgYGAKCiMgR2V0dGluZyBzdGFydGVkCkZpcnN0LCBsYXVuY2ggQ3l0b3NjYXBlIGFuZCBrZWVwIGl0IHJ1bm5pbmcgd2hlbmV2ZXIgdXNpbmcgUkN5My4gQ29uZmlybSB0aGF0IHlvdSBoYXZlIGV2ZXJ5dGhpbmcgaW5zdGFsbGVkIGFuZCBydW5uaW5nOgpgYGB7cn0KICAgIGN5dG9zY2FwZVBpbmcoKQogICAgY3l0b3NjYXBlVmVyc2lvbkluZm8oKQpgYGAKCiMgQmFja2dyb3VuZApUaGUgZGF0YSB1c2VkIGZvciB0aGlzIHByb3RvY29sIHJlcHJlc2VudHMgaW50ZXJhY3Rpb25zIGJldHdlZW4gaHVtYW4gYW5kIEhJViBwcm90ZWlucyBieSBbSsOkZ2VyIGV0IGFsXShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUMzMzEwOTExLykuIEluIHRoaXMgcXVhbnRpdGF0aXZlIEFQLU1TIGV4cGVyaW1lbnQsIGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgYmFpdCBwcm90ZWlucyB3ZXJlIHVzZWQgdG8gcHVsbCBkb3duIGEgbGFyZ2VyIHNldCBvZiBwcmV5IHByb3RlaW5zLgoKTm90ZSB0aGF0IHRoaXMgdHV0b3JpYWwgZG9lcyBub3QgZGVzY3JpYmUgaG93IHRvIHByZS1wcm9jZXNzIHRoZSByYXcgQVAtTVMgZGF0YSwgdGhlIGRhdGEgdXNlZCBoZXJlIGlzIGFscmVhZHkgc2NvcmVkIGFuZCBmaWx0ZXJlZC4KCiMgSW1wb3J0IE5ldHdvcmsKCkZpcnN0IGxldCdzIHJlYWQgaW4gdGhlIGV4YW1wbGUgZGF0YSBmaWxlOgoKYGBge3J9CmFwbXMuZGF0YTwtcmVhZC5jc3YoZmlsZT0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUtYXV0b21hdGlvbi9tYXN0ZXIvZm9yLXNjcmlwdGVycy9SL25vdGVib29rcy9BUC1NUy9hcC1tcy1kZW1vZGF0YV9zaW1wbGUuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQpgYGAKCk5vdyB3ZSBjYW4gY3JlYXRlIGEgZGF0YSBmcmFtZSBmb3IgdGhlIG5ldHdvcmsgZWRnZXMgKGludGVyYWN0aW9ucykgdXNpbmcgdGhlIGltcG9ydGVkIGRhdGEuIFdlIGNhbiBhbHNvIGFkZCB0aGUgQVAtTVMgc2NvcmUgZnJvbSB0aGUgZGF0YSBhcyBhbiBlZGdlIGF0dHJpYnV0ZTogCgpgYGB7cn0KZWRnZXMgPC0gZGF0YS5mcmFtZShzb3VyY2U9YXBtcy5kYXRhWywiQmFpdCJdLHRhcmdldD1hcG1zLmRhdGFbLCJQcmV5Il0sIEFQLk1TLlNjb3JlPWFwbXMuZGF0YVssIkFQLk1TLlNjb3JlIl0sc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkKYGBgCgpGaW5hbGx5LCB3ZSB1c2UgdGhlIGVkZ2UgZGF0YSBmcmFtZSB0byBjcmVhdGUgdGhlIG5ldHdvcmsuIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZmluZSBhIGRhdGEgZnJhbWUgZm9yIG5vZGVzLCBhcyBhbGwgbm9kZXMgaW4gdGhpcyBjYXNlIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZWRnZSBkYXRhIGZyYW1lLgoKYGBge3J9CmNyZWF0ZU5ldHdvcmtGcm9tRGF0YUZyYW1lcyhlZGdlcz1lZGdlcywgdGl0bGU9ImFwbXMgbmV0d29yayIsIGNvbGxlY3Rpb24gPSAiYXBtcyBjb2xsZWN0aW9uIikKYGBgCgpUaGUgaW1wb3J0ZWQgbmV0d29yayBjb25zaXN0cyBvZiBtdWx0aXBsZSBzbWFsbGVyIHN1Ym5ldHdvcmtzLCBlYWNoIHJlcHJlc2VudGluZyBhIGJhaXQgbm9kZSBhbmQgaXRzIGFzc29jaWF0ZWQgcHJleSBub2Rlcy4KCiMgTG9hZGluZyBEYXRhClRoZXJlIGlzIG9uZSBvdGhlciBjb2x1bW4gb2YgZGF0YSBmb3IgdGhlIHByZXkgcHJvdGVpbnMgdGhhdCB3ZSB3YW50IHRvIGxvYWQgaW50byB0aGlzIG5ldHdvcmssIHRoZSAqKkhFS1Njb3JlKiouCgpJbiB0aGlzIGRhdGEsIHRoZSBwcmV5IG5vZGVzIGFyZSByZXBlYXRlZCBmb3IgZWFjaCBpbnRlcmFjdGlvbnMgd2l0aCBhIEJhaXQgbm9kZSwgc28gdGhlIGRhdGEgY29udGFpbnMgZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIHNhbWUgYXR0cmlidXRlIChmb3IgZXhhbXBsZSBIRUtTY29yZSksIGZvciBlYWNoIFByZXkgbm9kZS4gRHVyaW5nIGltcG9ydCwgdGhlIGxhc3QgdmFsdWUgaW1wb3J0ZWQgd2lsbCBvdmVyd3JpdGUgcHJpb3IgdmFsdWVzIGFuZCB2aXN1YWxpemF0aW9ucyB1c2luZyB0aGlzIGF0dHJpYnV0ZSB0aHVzIG9ubHkgc2hvd3MgdGhlIGxhc3QgdmFsdWUuCgpgYGB7cn0KbG9hZFRhYmxlRGF0YShhcG1zLmRhdGFbLGMoIlByZXkiLCJIRUtTY29yZSIpXSwgZGF0YS5rZXkuY29sdW1uPSJQcmV5IikKYGBgCgpUaGUgaW1wb3J0ZWQgbmV0d29yayBjb25zaXN0cyBvZiBtdWx0aXBsZSBzbWFsbGVyIHN1Ym5ldHdvcmtzLCBlYWNoIHJlcHJlc2VudGluZyBhIGJhaXQgbm9kZSBhbmQgaXRzIGFzc29jaWF0ZWQgcHJleSBub2RlczoKCjxjZW50ZXI+CiFbXSguL2RhdGEvaW1nL2FwbXMtbncucG5nKQoK