This repository has been archived by the owner. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
wilson/vignettes/intro.Rmd
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
87 lines (71 sloc)
4.26 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
title: "Introduction" | |
author: "Hendrik Schultheis" | |
date: "`r Sys.Date()`" | |
output: rmarkdown::html_vignette | |
vignette: > | |
%\VignetteIndexEntry{Introduction} | |
%\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. |