Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In the second part of our series we will build another small shiny app but use another UI.
More specifically we will present the example of a UI with a plot at the top and columns at the bottom that contain the inputs that drive the plot. For our case we are going to use the diamonds
dataset to create a Diamonds Analyzer App.
This part can be useful for you in two ways.
First of all, you can see different ways to enhance the appearance and the utility of your shiny app.
Secondly you can make a revision on what you learnt in the “Building Shiny App” series as we will build basic shiny stuff in order to present it in the proper way.
Read the examples below to understand the logic of what we are going to do and then test your skills with the exercise set we prepared for you. Lets begin!
Answers to the are available here.
Shiny Installation
In order to create the app we have to install and load the package shiny
.
Exercise 1
Install and load shiny
.
Grid Layout
The sidebarLayout
uses Shiny’s grid layout functions. Rows are created by the fluidRow
function and include columns defined by the column
function. Column widths should add up to 12 within a fluidRow
.
The first parameter to the column
function is it’s width
. You can also change the position of columns to decide the location of UI elements. You can put columns to the right by adding the offset
parameter to the column
function. Each unit of offset increases the left-margin of a column by a whole column.
Now let’s begin to build our UI. First of all we will place the fluidpage
with a title
as below:
#ui.R
library(shiny)
shinyUI(fluidPage(
title = "Diamonds",
h4("Diamonds Analyzer")
))
#server.R
library(shiny)
function(input, output) {}
Exercise 2
Create the initial UI of your app and name it “Diamonds Analyzer”.
You can use the fluidrow
function with the column
function of width
=2 inside of it like this:
#ui.R
library(shiny)
shinyUI(fluidPage(
title = "Diamonds",
h4("Diamonds Analyzer"),
fluidRow(column(2),
column(2),
)
))
Exercise 3
Create a fluidrow
with two columns of width
= 4 inside it. NOTE: Do not expect to see something yet.
Now it is time to fill these columns with some tools that will help us determine the variables that we are going to use for our plot.
In the first 4 columns we will put a selectInput
as the code below.
#ui.R
fluidRow(column(4,
h4("Variable X"),
selectInput('x', 'X', names(diamonds)))
Exercise 4
Put a selectInput
in the first 4 columns of your UI. Name it “Variable X”. HINT:Use names
to get the names of the dataset diamonds
as inputs.
Now let’s move to the next four columns. We are going to put in there another selectInput
and select the second of the dataset’s names as default. We are also going to see what offset
does by setting it to 1 and then deactivating it again like the example below. You can use the code as it is or change the parameters given to understand the logic behind its use.
#ui.R
offset = 1,
selectInput('y', 'Y', names(dataset), names(dataset)[[2]])
Exercise 5
Create a selectInput
from column
5 to column
8. Choose the second of the dataset’s name as default. Name it “Variable Y”. HINT: Use names
to get the names of the dataset diamonds
as inputs.
Exercise 6
Set the offset
parameter to 1 from columns 5 to 8.
Now let’s call our plot
and put it on the top of our UI. Look at the example below.
Exercise 7
Place the plot
on the top of your UI. HINT: Use plotOutput
and hr
. NOTE: You are not going to see the plot
in your UI because you have not created the server side yet.
We are going to create a reactive expression in order to combine the selected variables into a new data frame.Look at the example:
#server.R
selectedData <- reactive({
diamonds[, c(input$x, input$y)]
})
Exercise 8
Create a reactive expression in order to combine the selected variables into a new data frame. HINT: Use reactive
.
Now plot your new data frame like the example:
#server.R
output$plot <- renderPlot({
plot(selectedData())
})
Exercise 9
Plot your data frame. HINT: Use renderPlot
.
As mentioned before the width
of our UI is equal to 12 columns. So what is goint to happen if we a add a new column of width
= 4 next to the other two? You have to find out in order to understand better how it works.
Exercise 10
Create a new selectInput
and try to put it next to “Variable Y”. Try to explain the result. NOTE: You do not have to connect it with your plot
.
Related exercise sets:
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.