diff --git a/.Rbuildignore b/.Rbuildignore index d73b159..560d88c 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -2,3 +2,4 @@ ^\.Rproj\.user$ ^\.buildkite.* ^revdep$ +^cran-comments.md$ diff --git a/DESCRIPTION b/DESCRIPTION index 74bdc07..614d338 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -6,10 +6,10 @@ Authors@R: c( person("Hendrik", "Schultheis", email = "hendrik.schultheis@mpi-bn.mpg.de", role = c("aut", "cre")), person("Jens", "Preussner", email = "jens.preussner@mpi-bn.mpg.de", role = "aut"), person("Looso", "Mario", email = "mario.looso@mpi-bn.mpg.de", role = "aut")) -Description: This package provides modules for web-based tools that use plot based strategies to visualize and analyze multi-omics data. - 'wilson' utilizes the 'shiny' and 'plotly' frameworks to provide a user friendly dashboard for interactive plotting. -URL: https://github.molgen.mpg.de/loosolab/wilson -BugReports: https://github.molgen.mpg.de/loosolab/wilson/issues +Description: Tool-set of modules for creating web-based applications that use plot based strategies to visualize and analyze multi-omics data. + This package utilizes the 'shiny' and 'plotly' frameworks to provide a user friendly dashboard for interactive plotting. +URL: https://github.molgen.mpg.de/loosolab/wilson/ +BugReports: https://github.molgen.mpg.de/loosolab/wilson/issues/ License: MIT + file LICENSE Encoding: UTF-8 LazyData: true @@ -47,4 +47,7 @@ Imports: shiny, methods, R6 RoxygenNote: 6.0.1 -biocViews: +biocViews: +Suggests: knitr, + rmarkdown +VignetteBuilder: knitr diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 0000000..9cdcac3 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,23 @@ +# wilson 2.0.0 +## Features +- clarion class: + - easier data-format validation by providing several checks + - simplified module usage (only forward clarion object) for top-level modules (e.g. filter & plot) + - provide functions for frequent tasks (e.g. get_name, is_delimited, etc.) + +- geneView: + - group columns by one or more factors + +- pca: + - color & shape grouping by selected factor(s) + +- scatterPlot: + - add name to hovertext if available (only interactive) + +## Misc +- improved notifications (closable, more) +- overall code quality improvements via usage of packages goodpractice and lintr +- removed deprecated colorPicker + +# wilson 1.0.0 +first public release diff --git a/R/release_questions.R b/R/release_questions.R new file mode 100644 index 0000000..25aa0e2 --- /dev/null +++ b/R/release_questions.R @@ -0,0 +1,14 @@ +#' Defines additional questions asked before CRAN submission. +#' DO NOT EXPORT! +release_questions <- function() { + c( + "Updated NEWS.md?", + "Updated README.md?", + "Re-run reverse dependencies?", + "Everything checked?", + "Abide good practices?", + "Updated cran-comments.md?", + "Updated vignettes?", + "Version upped?" + ) +} diff --git a/README.md b/README.md index 8555793..1bd6f53 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # WIlsON: Webbased Interactive Omics visualizatioN - The R Package -*Buildkite:* [![Build status](https://badge.buildkite.com/d79f55bb3e3cf0d70d6784feb8c6e26182d602f534e74fac4e.svg?branch=master)](https://buildkite.com/loosolab/wilson) +*Buildkite:* ![Build status](https://badge.buildkite.com/d79f55bb3e3cf0d70d6784feb8c6e26182d602f534e74fac4e.svg?branch=master) ## Abstract #### Objective @@ -12,9 +12,9 @@ The WIlsON R package employs the R Shiny and Plotly web-based frameworks using a The WIlsON R package includes a toolbox of R Shiny modules that can be used to construct a wide array of web-interfaces for plotting feature-based data. ## Availability -All components of the WIlsON R package have been implemented in an integrated web application that is available for download from the Github repository [wilson-apps](https://github.molgen.mpg.de/loosolab/wilson-apps) and can be tested on our [official demonstration server](http://loosolab.mpi-bn.mpg.de/apps/wilson/). +All components of the WIlsON R package have been implemented in an integrated web application that is available for download from the Github repository [wilson-apps](https://github.molgen.mpg.de/loosolab/wilson-apps/) and can be tested on our [official demonstration server](http://loosolab.mpi-bn.mpg.de/apps/wilson/). -Usage instructions can be found in the extensive [documentation](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki). +Usage instructions can be found in the extensive [documentation](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki/). Get a Docker container [here](https://hub.docker.com/r/loosolab/wilson/). @@ -37,7 +37,7 @@ CLARION: generiC fiLe formAt foR quantItative cOmparsions of high throughput scr CLARION is a data format especially developed to be used with WIlsON, which relies on a tab-delimited table with a metadata header to describe the following columns. It is based on the Summarized Experiment format and supports all types of data which can be reduced to features and their annotation (e.g. genes, transcripts, proteins, probes) with assigned numerical values (e.g. count, score, log2foldchange, z-score, p-value). Most result tables derived from RNA-Seq, ChIP/ATAC-Seq, Proteomics, Microarrays, and many other analyses can thus be easily reformatted to become compatible without having to modify the code of WIlsON for each specific experiment. -Please check the following link for details considering the [CLARION format](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki/CLARION-Format). +Please check the following link for details considering the [CLARION format](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki/CLARION-Format/). ## How to cite *Schultheis H, Kuenne C, Preussner J, Wiegandt R, Fust A, Bentsen M, Looso M*. WIlsON: Webbased Interactive Omics VisualizatioN. (2018), doi: https://XY diff --git a/cran-comments.md b/cran-comments.md new file mode 100644 index 0000000..580a3bb --- /dev/null +++ b/cran-comments.md @@ -0,0 +1,22 @@ +## Test environments +* local windows 7 install, R 3.5.1 +* debian 9.4, R 3.4.1 +* win-builder (devel and release) + +## R CMD check results +There were no ERRORs or WARNINGs. + +There was 1 NOTE: + +* New submission + +* Possibly mis-spelled words in DESCRIPTION: + Omics (3:30) + omics (9:126) + + Both are spelled correctly. First is capital because of title case. + +## Downstream dependencies +I have also run R CMD check on downstream dependencies of wilson +(https://github.molgen.mpg.de/loosolab/wilson/tree/master/revdep). +All packages that I could install passed. diff --git a/man/release_questions.Rd b/man/release_questions.Rd new file mode 100644 index 0000000..4d86795 --- /dev/null +++ b/man/release_questions.Rd @@ -0,0 +1,13 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/release_questions.R +\name{release_questions} +\alias{release_questions} +\title{Defines additional questions asked before CRAN submission. +DO NOT EXPORT!} +\usage{ +release_questions() +} +\description{ +Defines additional questions asked before CRAN submission. +DO NOT EXPORT! +} diff --git a/revdep/README.md b/revdep/README.md index 3b38cae..d73a3a5 100644 --- a/revdep/README.md +++ b/revdep/README.md @@ -4,48 +4,50 @@ |setting |value | |:--------|:----------------------------| -|version |R version 3.5.0 (2018-04-23) | +|version |R version 3.5.1 (2018-07-02) | |system |x86_64, mingw32 | |ui |RStudio (1.2.747) | |language |(EN) | |collate |German_Germany.1252 | |tz |Europe/Berlin | -|date |2018-06-29 | +|date |2018-07-04 | ## Packages |package |* |version |date |source | |:---------------|:--|:-------|:----------|:-----------------------------------| -|circlize | |0.4.4 |2018-06-10 |CRAN (R 3.5.0) | -|colourpicker | |1.0 |2017-09-27 |CRAN (R 3.5.0) | +|circlize | |0.4.4 |2018-06-10 |CRAN (R 3.5.1) | +|colourpicker | |1.0 |2017-09-27 |CRAN (R 3.5.1) | |ComplexHeatmap | |1.18.1 |2018-06-19 |Bioconductor (R 3.5.0) | -|data.table | |1.11.4 |2018-05-27 |CRAN (R 3.5.0) | +|data.table | |1.11.4 |2018-05-27 |CRAN (R 3.5.1) | |DESeq2 | |1.20.0 |2018-05-01 |Bioconductor | -|DT | |0.4 |2018-01-30 |CRAN (R 3.5.0) | -|factoextra | |1.0.5 |2017-08-22 |CRAN (R 3.5.0) | -|FactoMineR | |1.41 |2018-05-04 |CRAN (R 3.5.0) | -|ggplot2 | |2.2.1 |2016-12-30 |CRAN (R 3.5.0) | -|ggrepel | |0.8.0 |2018-05-09 |CRAN (R 3.5.0) | -|gplots | |3.0.1 |2016-03-30 |CRAN (R 3.5.0) | -|heatmaply | |0.15.0 |2018-06-23 |CRAN (R 3.5.0) | -|log4r | |0.2 |2014-09-29 |CRAN (R 3.5.0) | -|openssl | |1.0.1 |2018-03-03 |CRAN (R 3.5.0) | -|plotly | |4.7.1 |2017-07-29 |CRAN (R 3.5.0) | -|plyr | |1.8.4 |2016-06-08 |CRAN (R 3.5.0) | -|R6 | |2.2.2 |2017-06-17 |CRAN (R 3.5.0) | +|DT | |0.4 |2018-01-30 |CRAN (R 3.5.1) | +|factoextra | |1.0.5 |2017-08-22 |CRAN (R 3.5.1) | +|FactoMineR | |1.41 |2018-05-04 |CRAN (R 3.5.1) | +|ggplot2 | |2.2.1 |2016-12-30 |CRAN (R 3.5.1) | +|ggrepel | |0.8.0 |2018-05-09 |CRAN (R 3.5.1) | +|gplots | |3.0.1 |2016-03-30 |CRAN (R 3.5.1) | +|heatmaply | |0.15.0 |2018-06-23 |CRAN (R 3.5.1) | +|knitr | |1.20 |2018-02-20 |CRAN (R 3.5.1) | +|log4r | |0.2 |2014-09-29 |CRAN (R 3.5.1) | +|openssl | |1.0.1 |2018-03-03 |CRAN (R 3.5.1) | +|plotly | |4.7.1 |2017-07-29 |CRAN (R 3.5.1) | +|plyr | |1.8.4 |2016-06-08 |CRAN (R 3.5.1) | +|R6 | |2.2.2 |2017-06-17 |CRAN (R 3.5.1) | |RColorBrewer | |1.1-2 |2014-12-07 |CRAN (R 3.5.0) | -|reshape | |0.8.7 |2017-08-06 |CRAN (R 3.5.0) | -|rintrojs | |0.2.0 |2017-07-04 |CRAN (R 3.5.0) | +|reshape | |0.8.7 |2017-08-06 |CRAN (R 3.5.1) | +|rintrojs | |0.2.0 |2017-07-04 |CRAN (R 3.5.1) | |rje | |1.9 |2014-08-06 |CRAN (R 3.5.0) | |rjson | |0.2.20 |2018-06-08 |CRAN (R 3.5.0) | |RJSONIO | |1.3-0 |2014-07-28 |CRAN (R 3.5.0) | -|scales | |0.5.0 |2017-08-24 |CRAN (R 3.5.0) | -|shiny | |1.1.0 |2018-05-17 |CRAN (R 3.5.0) | -|shinycssloaders | |0.2.0 |2017-05-12 |CRAN (R 3.5.0) | -|shinydashboard | |0.7.0 |2018-03-21 |CRAN (R 3.5.0) | -|shinyjs | |1.0 |2018-01-08 |CRAN (R 3.5.0) | -|viridis | |0.5.1 |2018-03-29 |CRAN (R 3.5.0) | -|wilson | |2.0.0 |2018-06-29 |local (HendrikSchultheis/wilson@NA) | +|rmarkdown | |1.10 |2018-06-11 |CRAN (R 3.5.1) | +|scales | |0.5.0 |2017-08-24 |CRAN (R 3.5.1) | +|shiny | |1.1.0 |2018-05-17 |CRAN (R 3.5.1) | +|shinycssloaders | |0.2.0 |2017-05-12 |CRAN (R 3.5.1) | +|shinydashboard | |0.7.0 |2018-03-21 |CRAN (R 3.5.1) | +|shinyjs | |1.0 |2018-01-08 |CRAN (R 3.5.1) | +|viridis | |0.5.1 |2018-03-29 |CRAN (R 3.5.1) | +|wilson |* |2.0.0 |2018-07-04 |local (HendrikSchultheis/wilson@NA) | # Check results diff --git a/revdep/checks.rds b/revdep/checks.rds index dc78959..208d158 100644 Binary files a/revdep/checks.rds and b/revdep/checks.rds differ diff --git a/revdep/problems.md b/revdep/problems.md index 368348c..8f790c3 100644 --- a/revdep/problems.md +++ b/revdep/problems.md @@ -4,48 +4,50 @@ |setting |value | |:--------|:----------------------------| -|version |R version 3.5.0 (2018-04-23) | +|version |R version 3.5.1 (2018-07-02) | |system |x86_64, mingw32 | |ui |RStudio (1.2.747) | |language |(EN) | |collate |German_Germany.1252 | |tz |Europe/Berlin | -|date |2018-06-29 | +|date |2018-07-04 | ## Packages |package |* |version |date |source | |:---------------|:--|:-------|:----------|:-----------------------------------| -|circlize | |0.4.4 |2018-06-10 |CRAN (R 3.5.0) | -|colourpicker | |1.0 |2017-09-27 |CRAN (R 3.5.0) | +|circlize | |0.4.4 |2018-06-10 |CRAN (R 3.5.1) | +|colourpicker | |1.0 |2017-09-27 |CRAN (R 3.5.1) | |ComplexHeatmap | |1.18.1 |2018-06-19 |Bioconductor (R 3.5.0) | -|data.table | |1.11.4 |2018-05-27 |CRAN (R 3.5.0) | +|data.table | |1.11.4 |2018-05-27 |CRAN (R 3.5.1) | |DESeq2 | |1.20.0 |2018-05-01 |Bioconductor | -|DT | |0.4 |2018-01-30 |CRAN (R 3.5.0) | -|factoextra | |1.0.5 |2017-08-22 |CRAN (R 3.5.0) | -|FactoMineR | |1.41 |2018-05-04 |CRAN (R 3.5.0) | -|ggplot2 | |2.2.1 |2016-12-30 |CRAN (R 3.5.0) | -|ggrepel | |0.8.0 |2018-05-09 |CRAN (R 3.5.0) | -|gplots | |3.0.1 |2016-03-30 |CRAN (R 3.5.0) | -|heatmaply | |0.15.0 |2018-06-23 |CRAN (R 3.5.0) | -|log4r | |0.2 |2014-09-29 |CRAN (R 3.5.0) | -|openssl | |1.0.1 |2018-03-03 |CRAN (R 3.5.0) | -|plotly | |4.7.1 |2017-07-29 |CRAN (R 3.5.0) | -|plyr | |1.8.4 |2016-06-08 |CRAN (R 3.5.0) | -|R6 | |2.2.2 |2017-06-17 |CRAN (R 3.5.0) | +|DT | |0.4 |2018-01-30 |CRAN (R 3.5.1) | +|factoextra | |1.0.5 |2017-08-22 |CRAN (R 3.5.1) | +|FactoMineR | |1.41 |2018-05-04 |CRAN (R 3.5.1) | +|ggplot2 | |2.2.1 |2016-12-30 |CRAN (R 3.5.1) | +|ggrepel | |0.8.0 |2018-05-09 |CRAN (R 3.5.1) | +|gplots | |3.0.1 |2016-03-30 |CRAN (R 3.5.1) | +|heatmaply | |0.15.0 |2018-06-23 |CRAN (R 3.5.1) | +|knitr | |1.20 |2018-02-20 |CRAN (R 3.5.1) | +|log4r | |0.2 |2014-09-29 |CRAN (R 3.5.1) | +|openssl | |1.0.1 |2018-03-03 |CRAN (R 3.5.1) | +|plotly | |4.7.1 |2017-07-29 |CRAN (R 3.5.1) | +|plyr | |1.8.4 |2016-06-08 |CRAN (R 3.5.1) | +|R6 | |2.2.2 |2017-06-17 |CRAN (R 3.5.1) | |RColorBrewer | |1.1-2 |2014-12-07 |CRAN (R 3.5.0) | -|reshape | |0.8.7 |2017-08-06 |CRAN (R 3.5.0) | -|rintrojs | |0.2.0 |2017-07-04 |CRAN (R 3.5.0) | +|reshape | |0.8.7 |2017-08-06 |CRAN (R 3.5.1) | +|rintrojs | |0.2.0 |2017-07-04 |CRAN (R 3.5.1) | |rje | |1.9 |2014-08-06 |CRAN (R 3.5.0) | |rjson | |0.2.20 |2018-06-08 |CRAN (R 3.5.0) | |RJSONIO | |1.3-0 |2014-07-28 |CRAN (R 3.5.0) | -|scales | |0.5.0 |2017-08-24 |CRAN (R 3.5.0) | -|shiny | |1.1.0 |2018-05-17 |CRAN (R 3.5.0) | -|shinycssloaders | |0.2.0 |2017-05-12 |CRAN (R 3.5.0) | -|shinydashboard | |0.7.0 |2018-03-21 |CRAN (R 3.5.0) | -|shinyjs | |1.0 |2018-01-08 |CRAN (R 3.5.0) | -|viridis | |0.5.1 |2018-03-29 |CRAN (R 3.5.0) | -|wilson | |2.0.0 |2018-06-29 |local (HendrikSchultheis/wilson@NA) | +|rmarkdown | |1.10 |2018-06-11 |CRAN (R 3.5.1) | +|scales | |0.5.0 |2017-08-24 |CRAN (R 3.5.1) | +|shiny | |1.1.0 |2018-05-17 |CRAN (R 3.5.1) | +|shinycssloaders | |0.2.0 |2017-05-12 |CRAN (R 3.5.1) | +|shinydashboard | |0.7.0 |2018-03-21 |CRAN (R 3.5.1) | +|shinyjs | |1.0 |2018-01-08 |CRAN (R 3.5.1) | +|viridis | |0.5.1 |2018-03-29 |CRAN (R 3.5.1) | +|wilson |* |2.0.0 |2018-07-04 |local (HendrikSchultheis/wilson@NA) | # Check results diff --git a/vignettes/intro.Rmd b/vignettes/intro.Rmd new file mode 100644 index 0000000..9b9fc74 --- /dev/null +++ b/vignettes/intro.Rmd @@ -0,0 +1,87 @@ +--- +title: "Introduction" +author: "Hendrik Schultheis" +date: "`r Sys.Date()`" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Vignette Title} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +This vignette describes the intended workflow and usage of the wilson package for building an application and provides a simple example. + +**Prerequisites:** + +* be familiar with the basic structure of a [shiny-app](https://shiny.rstudio.com/articles/basics.html) and [shinydashboard](https://rstudio.github.io/shinydashboard/get_started.html) +* know how to use [shiny-modules](https://shiny.rstudio.com/articles/modules.html#using-modules) +* have a sufficient dataset in clarion-format + * either by [converting](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki/CLARION-Format/) your own data + * or downloading from [here](https://github.molgen.mpg.de/loosolab/wilson-apps/tree/master/wilson-basic/data/) + +## Workflow + +The workflow of a wilson-application can roughly be divided into three basic steps: + +1. load data +2. filter data +3. visualize data + +But depending on the actual implementation neither the order nor the number of steps are set. Resulting in enhanced usability as for example the filter can be changed at any given time. + +## Example + +In this example we will create a wilson-application with a static dataset, a single visualization method and a preceding filter, seperated into a *Filter* and a *Visualization* tab. + +So to start we first import the needed packages and afterwards define the application interface: +``` +library(shiny) +library(shinydashboard) +library(wilson) + +# Define UI for application +ui <- dashboardPage( + header = dashboardHeader(disable = TRUE), + sidebar = dashboardSidebar(disable = TRUE), + body = dashboardBody( + tags$style(type = "text/css", "body {padding-top: 50px;}"), + navbarPage( + title = "wilson example", + position = "fixed-top", + tabPanel(title = "Filter", + # Load filter UI + featureSelectorUI(id = "filter")), + tabPanel(title = "Visualization", + # Load scatterplot UI + scatterPlotUI(id = "scatter")) + ))) +``` +This code creates an UI with two tabs. The first tab with the title *Filter* contains the filter UI called with `featureSelectorUI()` whereas the UI needed for a scatterplot called with `scatterPlotUI()` is enclosed by the second tab (*Visualization*). + +Second the server function needs to be as follows: +``` +# Define server logic required for filtering and plotting +server <- function(input, output, session) { + # load/ parse data + # change this path to match your file location + data <- parser("../wilson-apps/wilson-basic/data/A_RNAseq_Zhang_2015.se") + + # Load filter server logic + filtered_data <- callModule(module = featureSelector, id = "filter", clarion = data) + # Load scatterplot server logic + callModule(module = scatterPlot, id = "scatter", clarion = reactive(filtered_data()$object)) +} + +# Run the application +shinyApp(ui = ui, server = server) +``` +The server reacts to user interactions whith the interface. Once started it will first parse the given [clarion](https://github.molgen.mpg.de/loosolab/wilson-apps/wiki/CLARION-Format/) file into a clarion object, performing validation steps in the process. Next the server functions of the necessary [modules](https://shiny.rstudio.com/articles/modules.html) defined in the UI (notice the matching ids) are loaded. Whereas the filter module bluntly accepts the data object with `clarion = data` the plot module receives its data via `clarion = reactive(filtered_data()$object)`. Wrapping in `reactive()` is due to the fact, that the filtered data object returned from the filter module is in a reactive context which essentially means shiny 'knows' when this variable changes. Read more about shiny's reactivity system [here](https://shiny.rstudio.com/articles/reactivity-overview.html). + +For a more advanced example of a wilson-application see the [wilson-basic app](https://github.molgen.mpg.de/loosolab/wilson-apps/blob/master/wilson-basic/app.R) in our [wilson-apps](https://github.molgen.mpg.de/loosolab/wilson-apps/) repository. diff --git a/wilson.Rproj b/wilson.Rproj index 49f2092..6291372 100644 --- a/wilson.Rproj +++ b/wilson.Rproj @@ -17,3 +17,4 @@ StripTrailingWhitespace: Yes BuildType: Package PackageUseDevtools: Yes PackageInstallArgs: --no-multiarch --with-keep.source +PackageCheckArgs: --as-cran