{"id":18256418,"url":"https://github.com/baderlab/scclustviz","last_synced_at":"2025-04-04T17:32:05.887Z","repository":{"id":46188200,"uuid":"87468476","full_name":"BaderLab/scClustViz","owner":"BaderLab","description":"Explore and share your scRNAseq clustering results","archived":false,"fork":false,"pushed_at":"2023-09-06T22:54:55.000Z","size":729604,"stargazers_count":45,"open_issues_count":12,"forks_count":9,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-06-10T10:47:16.548Z","etag":null,"topics":["clustering-evaluation","differential-expression","r","scrna-seq","scrna-seq-analysis","scrnaseq","shiny","single-cell","ui"],"latest_commit_sha":null,"homepage":"https://baderlab.github.io/scClustViz/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BaderLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-04-06T19:45:13.000Z","updated_at":"2024-05-12T02:52:08.000Z","dependencies_parsed_at":"2023-10-20T18:14:37.595Z","dependency_job_id":null,"html_url":"https://github.com/BaderLab/scClustViz","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaderLab%2FscClustViz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaderLab%2FscClustViz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaderLab%2FscClustViz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaderLab%2FscClustViz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BaderLab","download_url":"https://codeload.github.com/BaderLab/scClustViz/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223151768,"owners_count":17096172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clustering-evaluation","differential-expression","r","scrna-seq","scrna-seq-analysis","scrnaseq","shiny","single-cell","ui"],"created_at":"2024-11-05T10:21:49.344Z","updated_at":"2024-11-05T10:21:50.152Z","avatar_url":"https://github.com/BaderLab.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"# scClustViz\nAn interactive R Shiny tool for visualizing single-cell RNAseq clustering results from common analysis pipelines.  Its main goal is two-fold: **A:** to help select a biologically appropriate resolution or K from clustering results by assessing differential expression between the resulting clusters; and **B:** help annotate cell types and identify marker genes.  \n[See our paper for details!](https://f1000research.com/articles/7-1522/v2)  \n\n### Contents:\n- [Example Output](#example-output)\n- [Usage](#usage)\n  - [Installation](#installation)\n  - [Basic Usage](#basic-usage)\n  - [Use Your Own Cluster Names](#use-your-own-cluster-names)\n  - [Iterative Clustering With scClustViz](#iterative-clustering-with-scclustviz)\n  - [Use Your Own Differential Expression Results](#use-your-own-differential-expression-results)\n- [Data Packages](#data-packages)\n  - [Embryonic Mouse Cerebral Cortex](#embryonic-mouse-cerebral-cortex)\n  - [Human Liver Atlas](#human-liver-atlas)\n  - [Make Your Own Data Package!](#make-your-own-data-package)\n- [Citation](#citation)\n- [Contact](#contact)\n\n# Example Output\nBefore installing a package it's always nice to *see* what it is. [See how we share our published single-cell RNAseq datasets online using scClustViz here](http://shiny.baderlab.org/)\n\n\n# Usage\n## Installation\nInstall scClustViz using devtools:\n```r\n# install devtools\ninstall.packages(\"devtools\")\n\n# install scClustViz\ndevtools::install_github(\"BaderLab/scClustViz\")\n\n# install presto for 1000x faster differential expression testing (optional)\ndevtools::install(immunogenomics/presto)\n```\n### Common installation challenges\nIf you're on linux and getting errors running `devtools::install_github`, make sure RCurl is working - you might need to install libcurl4-openssl-dev.  \nIf you're on mac and having trouble installing `presto`, make sure you have the Xcode developer tools installed, since it requires `Rcpp` to compile the C++ backend.  \nIf you're trying to save figures as `.pdf` or `.eps` and running into problems, your computer is probably missing the cairo graphics library.  You can check this by running `capabilities(\"cairo\")`.\n\n## Basic Usage\nFollowing normalization, dimensionality reduction (include 2D cell embedding), and clustering using a workflow of your choice, scClustViz can be used to do differential expression testing (using the Wilcoxon rank-sum test) to both assess different clustering solutions and explore your results.  First, run the DE testing as follows:\n```r\nlibrary(scClustViz)\n\n# if using Seurat, this regex can grab \n# the metadata columns representing cluster results:\nyour_cluster columns \u003c- grepl(\"res[.0-9]+$\",\n                              names(getMD(your_Seurat_object)))\nyour_cluster_results \u003c- getMD(your_Seurat_object)[,your_cluster_columns]\n\n\nsCVdata_list \u003c- CalcAllSCV(\n  inD=your_scRNAseq_data_object,\n  clusterDF=your_cluster_results,\n  assayType=NULL, #specify assay slot of data\n  DRforClust=\"pca\",#reduced dimensions for silhouette calc\n  exponent=exp(1), #log base of normalized data\n  pseudocount=1,\n  DRthresh=0.1, #gene filter - minimum detection rate\n  testAll=F, #stop testing clusterings when no DE between clusters\n  FDRthresh=0.05,\n  calcSil=T, #use cluster::silhouette to calc silhouette widths\n  calcDEvsRest=T,\n  calcDEcombn=T\n)\n\nsave(your_scRNAseq_data_object,sCVdata_list,\n     file=\"for_scClustViz.RData\")\n# This file can now be shared so anyone \n# can view your results with the Shiny app!\n```\nOnce the previous setup step has been performed once and the output saved, you can explore the data in the interactive Shiny interface by simply pointing it to the saved file:\n```r\n# Lets assume this is data from an embryonic mouse cerebral cortex:\n# (This is the call wrapped by MouseCortex::viewMouseCortex(\"e13\"))\nrunShiny(\n  filePath=\"for_scClustViz.RData\",\n  \n  outPath=\"./\",\n  # Save any further analysis performed in the app to the\n  # working directory rather than library directory.\n  \n  annotationDB=\"org.Mm.eg.db\",\n  # This is an optional argument, but will add annotations.\n  \n  cellMarkers=list(\"Cortical precursors\"=c(\"Mki67\",\"Sox2\",\"Pax6\",\n                                           \"Pcna\",\"Nes\",\"Cux1\",\"Cux2\"),\n                   \"Interneurons\"=c(\"Gad1\",\"Gad2\",\"Npy\",\"Sst\",\"Lhx6\",\n                                    \"Tubb3\",\"Rbfox3\",\"Dcx\"),\n                   \"Cajal-Retzius neurons\"=\"Reln\",\n                   \"Intermediate progenitors\"=\"Eomes\",\n                   \"Projection neurons\"=c(\"Tbr1\",\"Satb2\",\"Fezf2\",\n                                          \"Bcl11b\",\"Tle4\",\"Nes\",\n                                          \"Cux1\",\"Cux2\",\"Tubb3\",\n                                          \"Rbfox3\",\"Dcx\")\n  ),\n  # This is a list of canonical marker genes per expected cell type.\n  # The app uses this list to automatically annotate clusters.\n  \n  imageFileType=\"png\"\n  #Set the file format of any saved figures from the app.\n)\n\n```\n\n## Use Your Own Cluster Names\nscClustViz has a very basic cluster annotation method built into `runShiny` implemented by the `labelCellTypes` function. It uses a user-defined list of marker genes per expected cell type to assign labels to each cluster.  The median gene expression for each set of marker genes is calculated for each cluster, and clusters are assigned the label of the highest-ranking marker gene set.  This is provided as a convenience function, as there are many more sophisticated cluster annotation methods in the literature, and expert curation is probably still the gold standard.  With that in mind, you can assign your own labels to clusters for any cluster solution (the same labels can be assigned to multiple clusters).\n```r\nlevels(Clusters(sCVdata_list$chosen_cluster_solution))\n# Your cluster labels should be in the same order as the existing cluster levels\n\nyour_cluster_names \u003c- c(\"Cell type zero\",\n                        \"Cell type one\",\n                        \"Third cell type\",\n                        \"Cell type 3 (thanks Seurat)\",\n                        \"Last cell type (4,5,who knows?)\")\nClusterNames(sCVdata_list$chosen_cluster_solution) \u003c- your_cluster_names\n\nsave(your_scRNAseq_data_object,sCVdata_list,\n     file=\"for_scClustViz.RData\") \n# ^ Don't forget to save!\n```\n\n## Iterative Clustering With scClustViz\nIncorporating the scClustViz cluster assessment metric into your analysis \npipeline is simply a matter of running the differential expression testing after \nevery clustering run, instead of post-hoc. This allows you to systematically \nincrease the resolution or K parameter of the clustering algorithm until \nstatistically significant differential expression between nearest neighbour \nclusters is lost. An example using the Seurat(v2) clustering method is shown here.\n```r\nDE_bw_clust \u003c- TRUE\nseurat_resolution \u003c- 0\nsCVdata_list \u003c- list()\n\nwhile(DE_bw_clust) {\n  seurat_resolution \u003c- seurat_resolution + 0.2\n  # ^ Iteratively incrementing resolution parameter\n\n  your_seurat_obj \u003c- Seurat::FindClusters(your_seurat_obj,\n                                          resolution=seurat_resolution)\n  # ^ Calculate clusters using method of choice.\n  \n  if (length(levels(your_seurat_obj@ident)) \u003c= 1) { next } \n  # ^ Only one cluster was found, need to bump up the resolution!\n  \nif (length(sCVdata_list) \u003e= 1) {\n  temp_cl \u003c- length(levels(Clusters(sCVdata_list[[length(sCVdata_list)]])))\n  if (temp_cl == length(levels(seurat_resolution@ident))) { \n    temp_cli \u003c- length(levels(interaction(\n      Clusters(sCVdata_list[[length(sCVdata_list)]]),\n      seurat_resolution@ident,\n      drop=T\n    )))\n    if (temp_cli == length(levels(seurat_resolution@ident))) { \n      next \n    }\n  }\n}\n# ^ if clustering results are identical to previous, move on.\n\n  curr_sCVdata \u003c- CalcSCV(\n    inD=your_seurat_obj,\n    cl=your_seurat_obj@ident, #factor containing cluster assignments\n    assayType=NULL, #specify assay slot of data\n    DRforClust=\"pca\", #reduced dimensions for silhouette calc\n    exponent=exp(1), #log base of normalized data\n    pseudocount=1,\n    DRthresh=0.1, #gene filter - minimum detection rate\n    calcSil=T, #use cluster::silhouette to calc silhouette widths\n    calcDEvsRest=T,\n    calcDEcombn=T\n  )\n\n  DE_bw_NN \u003c- sapply(DEneighb(curr_sCVdata,0.05),nrow)\n  # ^ counts # of DE genes between neighbouring clusters at 5% FDR\n\n  if (min(DE_bw_NN) \u003c 1) { DE_bw_clust \u003c- FALSE }\n  # ^ If no DE genes between nearest neighbours, don't loop again.\n\n  sCVdata_list[[paste0(\"res.\",seurat_resolution)]] \u003c- curr_sCVdata\n  # Add sCVdata object to list with an appropriate name.\n}\n\nsave(your_seurat_obj,sCVdata_list,\n     file=\"for_scClustViz.RData\")\n\nrunShiny(filePath=\"for_scClustViz.RData\")\n# ^ see ?runShiny for detailed argument list\n```\n\n## Use Your Own Differential Expression Results\nscClustViz uses the wilcoxon rank-sum test for its differential expression testing.  You can provide your own DE results from a testing method of your choice instead, skipping sCV's testing steps. In both `CalcAllSCV` and `CalcSCV` there are arguments `calcDEvsRest` and `calcDEcombn`, which can be set to false to skip those differential expression calculations.  You can then use `DEvsRest(your_sCVdata_object) \u003c- your_DE_dataframe_list` and `DEcombn(your_sCVdata_object) \u003c- your_DE_dataframe_list` to pass your results into the sCVdata objects. DEvsRest represents differential expression tests between each cluster and the remaining cells, and should be a named list of data frames where each name refers to the tested cluster (see `?CalcDEvsRest` for details). DEcombn represents differential expression tests between all pairwise combinations of clusters, and should be a named list of data frames were each name refers to the cluster pair, with cluster names separated by \"-\" (see `?CalcDEcombn` for details). In both cases, data frames must contain variables `logGER` (an effect size measure: gene expression ratio in log space, often referred to as logFC) and `FDR` (significance measure: false discovery rate), as well as `dDR` (an effect size measure: difference in detection rate) for `DEcombn`. An example using Seurat(v2) is shown here:\n```r\n# One vs all testing ----\nMAST_oneVSall \u003c- FindAllMarkers(your_seurat_obj,\n                                logfc.threshold=0,\n                                min.pct=0.1,\n                                test.use=\"MAST\",\n                                latent.vars=\"nUMI\")\n# ^ FindAllMarkers and CalcDEvsRest do equivalent comparisons \n\nnames(MAST_oneVSall)[names(MAST_oneVSall) == \"avg_logFC\"] \u003c- \"logGER\"\n# ^ Effect size variable must be named 'logGER'\nnames(MAST_oneVSall)[names(MAST_oneVSall) == \"p_val_adj\"] \u003c- \"FDR\"\n# ^ Significance variable must be named 'FDR'\n\nMAST_oneVSall_list \u003c- sapply(levels(MAST_oneVSall$cluster),\n                             function(X) {\n                               temp \u003c- MAST_oneVSall[MAST_oneVSall$cluster == X,]\n                               rownames(temp) \u003c- temp$gene\n                               # ^ Rownames must be gene names.\n                               return(temp)\n                             },simplify=F)\n# ^ Dataframe converted to list of dataframes per cluster\n\nDEvsRest(your_sCV_obj) \u003c- MAST_oneVSall_list\n# ^ Slot MAST results into sCVdata object\n\n\n# Pairwise testing ----\nMAST_pw \u003c- apply(combn(levels(your_seurat_obj@ident),2),2,\n                 function(X) {\n                   FindMarkers(your_seurat_obj,\n                               ident.1=X[1],\n                               ident.2=X[2],\n                               logfc.threshold=0,\n                               min.pct=0.1,\n                               test.use=\"MAST\",\n                               latent.vars=\"nUMI\")\n                 })\n# ^ Test DE between every pairwise combination of clusters\n# equivalent to testing performed by CalcDEcombn\nnames(MAST_pw) \u003c- apply(combn(levels(your_seurat_obj@ident),2),2,\n                        function(X) paste(X,collapse=\"-\"))\n# ^ Names must be in \"X-Y\" format\n\nfor (i in names(MAST_pw)) {\n  MAST_pw[[i]]$dDR \u003c- MAST_pw[[i]]$pct.1 - MAST_pw[[i]]$pct.2\n  # ^ Diff in detect rate (dDR) must be a variable in each dataframe\n  names(MAST_pw[[i]])[names(MAST_pw[[i]]) == \"avg_logFC\"] \u003c- \"logGER\"\n  # ^ Effect size variable must be named 'logGER'\n  names(MAST_pw[[i]])[names(MAST_pw[[i]]) == \"p_val_adj\"] \u003c- \"FDR\"\n  # ^ Significance variable must be named 'FDR'\n  # Note: rownames of each dataframe must be gene names, \n  # but FindMarkers should already do this.\n}\nDEcombn(your_sCV_obj) \u003c- MAST_pw\n# ^ Slot MAST results into sCVdata object\n```\n\n\n# Data Packages\nThe following data packages can be used to explore the features of scClustViz. You can also follow the vignette below to build your own data package to easily share your analysed scRNAseq data with collaborators and the public.\n\n## Embryonic Mouse Cerebral Cortex\nThe data from the 2017 Cell Reports paper [Developmental Emergence of Adult Neural Stem Cells as Revealed by Single-Cell Transcriptional Profiling](https://doi.org/10.1016/j.celrep.2017.12.017) by Yuzwa *et al.* are available to explore [at our website](http://shiny.baderlab.org/#mouse-cerebral-cortex) or by installing the R package [MouseCortex](https://github.com/BaderLab/MouseCortex). These are DropSeq data from timepoints spanning neurogenesis and filtered for cortically-derived cells, processed on an earlier version of the pipeline outlined below (using scran for normalization and Seurat for clustering) and imported into scClustViz using the steps outlined above.\n\nInstall MouseCortex using devtools as follows:\n```r\n# install devtools\ninstall.packages(\"devtools\")\n\n# install MouseCortex (demo data from Yuzwa et al, Cell Reports 2017)\ndevtools::install_github(\"BaderLab/MouseCortex\") \n# this takes a minute or two\n\n# install mouse gene annotations from bioconductor (optional)\nsource(\"https://bioconductor.org/biocLite.R\")\nbiocLite(\"org.Mm.eg.db\")\n```\nThen run the scClustViz Shiny app to view your dataset of choice! \nThere's a wrapper function in the MouseCortex package that handles the call to scClustViz, so it's nice and simple. \nIf you're interested, `?runShiny` has example code showing the function call used by the wrapper function.\n```r\nlibrary(MouseCortex)\nviewMouseCortex(\"e13\")\n```\n\n## Human Liver Atlas\nThe data from the 2018 Nature Communications paper [Single cell RNA sequencing of human liver reveals distinct intrahepatic macrophage populations](https://doi.org/10.1038/s41467-018-06318-7) by MacParland *et al.* are available to explore [at our website](http://shiny.baderlab.org/#human-liver-atlas) or by installing the R package [HumanLiver](https://github.com/BaderLab/HumanLiver). These are 10X Chromium data from the livers of 5 human donors, processed on the pipeline outlined below (using scran for normalization and Seurat for clustering) and imported into scClustViz using the steps outlined above.\n\nInstall HumanLiver using devtools as follows:\n```r\n# install devtools\ninstall.packages(\"devtools\")\n\n# install HumanLiver \n# (R data package for MacParland et al., Nat Commun 2018)\ndevtools::install_github(\"BaderLab/HumanLiver\") \n# this takes a minute or two\n\n# install human gene annotations from bioconductor (optional)\nsource(\"https://bioconductor.org/biocLite.R\")\nbiocLite(\"org.Hs.eg.db\")\n```\nThen run the scClustViz Shiny app to view your dataset of choice! \nThere's a wrapper function in the MouseCortex package that handles the call to scClustViz, so it's nice and simple. \nIf you're interested, `?runShiny` has example code showing the function call used by the wrapper function.\n```r\nlibrary(HumanLiver)\nviewHumanLiver()\n```\n\n## Make Your Own Data Package!\nBuilding an R package is a relatively easy task thanks to RStudio and the roxygen2 and devtools packages. The following vignette will show you how to take your saved output from the scClustViz setup and share it as an R package on github as seen in the data packages above. It is entirely based on the invaluable book [R packages](http://r-pkgs.had.co.nz/) by Hadley Wickham.  \nFirst, you must have generated your input file for the `runShiny` command in scClustViz by following the steps in the [usage guide](#scclustviz-usage-guide) above.  \nThen, create a new project in RStudio, selecting \"New directory\" -\u003e \"R package\" and making sure to check \"Create a git repository\". If you haven't already set up git/github in RStudio, check out [this blogpost](https://www.r-bloggers.com/rstudio-and-github/) for an explanation. If you only want to make a package to share with colleagues, you can skip github and simply send them the bundled package when you're done.  \nOnce you've opened your new package in RStudio, make sure to have both \"Use devtools package functions\" and \"Generate documentation with Roxygen\" selected under \"Project Options\" -\u003e \"Build Tools\". Also, delete the existing NAMESPACE file, since Roxygen will create a new one when you build the package.  \nYou're now ready to build your package.  First, make a folder in the package directory called \"inst\", and put your input file for *runShiny* there. All files in \"inst\" become part of the root directory of the package after installation, so it's best to store your data in a folder within inst.\n```r\ndir.create(\"inst/packageData/\",recursive=T)\nsave(data_for_scClustViz,DE_for_scClustViz,\n     file=\"inst/packageData/MyDataTitle.RData\")\n```\nIf you'd like a default resolution to load when the user views your data in scClustViz, now's the time to save that.\n```r\nrunShiny(\"inst/packageData/MyDataTitle.RData\")\n```\nSave your selected cluster resolution as default in the app. It will be saved as `inst/packageData/MyDataTitle_savedRes.RData`. You will also see a file called `inst/packageData/MyDataTitle_intro.md`. This is a markdown file that stores the text displayed at the top of the scClustViz GUI. You can edit it to say what you want (perhaps a link to the paper the data is from, and maybe the abstract?).  \nNow all you need to do is write the wrapper function to call *runShiny*. Here is an example R script (overwrite R/HelloWorld.R) to save in the \"R\" directory of the package.\n```r\n#' View MyData data in the scClustViz Shiny app\n#'\n#' A wrapper function to view the \\code{MyData} dataset in the\n#' \\code{scClustViz} Shiny app.\n#'\n#' @param outPath Default = \"./\" (the working directory). Specify the \n#'   directory used to save/load any analysis files you generate while \n#'   exploring the \\code{MyData} data.\n#'\n#' @return The function causes the scClustViz Shiny GUI app to open in a\n#'   seperate window.\n#'\n#' @examples\n#'   viewMyData()\n#'\n#' @seealso \\url{https://baderlab.github.io/scClustViz} for information on\n#'   \\code{scClustViz}.\n#'\n#' @export\n\nviewMyData \u003c- function(outPath=\"./\",imageFileType=\"pdf\") {\n  filePath \u003c- system.file(\"packageData/MyDataTitle.RData\",\n                          package=\"MyDataPackage\")\n  cellMarkers \u003c- list()\n  # If you have a list of cell-type marker genes for you data,\n  # add them here!\n  \n  # Change \"org.Hs.eg.db\" to the appropriate AnnotationDbi object for your \n  # data. This way if your user has the library installed, it will be used, \n  # otherwise it will be skipped without causing any errors.\n  if (require(\"org.Hs.eg.db\",quietly=T)) {\n    annotationDB \u003c- org.Hs.eg.db\n    scClustViz::runShiny(filePath=filePath,\n                         outPath=outPath,\n                         cellMarkers=cellMarkers,\n                         annotationDB=annotationDB,\n                         imageFileType=imageFileType)\n\n  } else {\n    scClustViz::runShiny(filePath=filePath,\n                         outPath=outPath,\n                         cellMarkers=cellMarkers,\n                         imageFileType=imageFileType)\n  }\n}\n```\nNow that you have a wrapper function, all that's left to do is fix up the DESCRIPTION file. The most important entries for functionality in the file are the following:\n```\nSuggests: org.Hs.eg.db\nImports: scClustViz\nRemotes: BaderLab/scClustViz\n```\nChange \"org.Hs.eg.db\" to the appropriate AnnotationDbi library. This lets the user know that they would benefit from having it installed. More importantly, `Imports: scClustViz` tells R devtools to install scClustViz when installing your package. Since scClustViz isn't in CRAN, the line `Remotes: BaderLab/scClustViz` lets devtools know where to find it.  \nNow that everything's ready, use the \"Install and Restart\" button in RStudio or hit Ctrl+Shift+B to build and install the package locally. You should now be able to use the wrapper command to open scClustViz with your data. If you're happy with everything, it's time to push to github!  \nFirst you must [create a new repository on github](https://help.github.com/articles/creating-a-new-repository/) for your package. Then it's as simple as pushing your first commit (commands here are in the bash shell):\n```sh\n# Set the remote to the github account:\ngit remote add origin https://github.com/YourGithubAccount/MyDataPackage.git \n\n# Stage your directory\ngit add .\n\n# Make your first commit\ngit commit -m \"MyData is now an R package!\"\n\n# Push your first commit to github \n# (could be slow, since you're uploading data files)\ngit push -u origin master\n```\nNow all you need to do is edit the README file to tell the world how to install and run your package:\n```r\ndevtools::install_github(\"YourGithubAccount/MyDataPackage\")\nlibrary(MyDataPackage)\nviewMyData()\n```\n\n\n# Citation\nInnes BT and Bader GD. scClustViz – Single-cell RNAseq cluster assessment and visualization [version 2; peer review: 2 approved]. F1000Research 2019, 7:1522 (doi: [10.12688/f1000research.16198.2](https://doi.org/10.12688/f1000research.16198.2))\n\n\n# Contact\nYou can [contact me](http://www.baderlab.org/BrendanInnes) for questions about this repo.  For general scRNAseq questions, do what I do and [ask the Toronto single-cell RNAseq working group on Slack](http://bit.ly/TOscRNAseq)!  \n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaderlab%2Fscclustviz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaderlab%2Fscclustviz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaderlab%2Fscclustviz/lists"}