It can be challenging to troubleshoot or design the output of reactive data elements in a flexdashboard. Very often, to see a change, the builder has to run the dashboard in order to see the output. This package is designed to alleviate this challenge by turning your reactive objects into functions you can interact with in the console. Here are a few tips that will help you (and others) troubleshoot your code:
If you create a chunk like the code below, you will be able to
simulate reactive values like input$displ
and
input$year
without having to run the whole dashboard. The
input
object created here is a list containing 3 elements
(displ
, year
, and drv
). By
creating the list named input
in a chunk of your code, you
can simulate the way the values will work when it actually runs. Do
note, you will need to use eval = FALSE
in the chunk so
this part of your code will be ignored when the dashboard is run.
With the dummy input
object created earlier, I am able
to run the df
and subsequent ggplot()
code
locally in the console. As a note, running all of
renderPlot()
will only show text in the console but if you
run the df <-
section and the ggplot()
section, you will have access to df
in your environment and
see the bar chart in the plot pane of RStudio.
I often see something like the code below. Notice that there are two
reactive steps: reactive()
to create the reactive data
frame and then renderPlot()
.
reactive_df <- reactive(
raw_data %>%
filter(displ >= input$displ)
)
renderPlot(
ggplot(reactive_df(), aes(class)) +
geom_bar()
)
If this reactive data frame is created only for this one
plot, you can embed the data manipulation within the
renderPlot()
function. If this data will be used thin two
or more outputs in the dashboard and has a lot of data manipulation, a
reactive dataframe is a good idea.
When you add curly braces {...}
inside the
renderPlot()
it creates a mini environment where you can
create multiple objects. This is similar to how you might do the same in
a function() {...}
or a loop
for(i in 1:10) {...}
render*({...})
functions if you need to do data manipulation in order to create an
output