Gwen Yang
Gwen Yang

Reputation: 146

embed shiny app into Rmarkdown html document

I am able to create an Rmarkdown file and I'm trying to embed a shiny app into the html output. The interactive graph shows if I run the code in the Rmarkdown file. But in the html output it only shows a blank box. Can anybody help fix it?

Run the code in Rmarkdown file:

enter image description here

In the html output:

enter image description here

My Rmarkdown file (please add the three code sign at the end yourself somehow i cannot do here):

        ---
        title: "Data Science - Tagging"
        pagetitle: "Data Science - Style Tagging"
        author: 
          name: "yyy"
        params:
          creation_date: "`r format(Sys.time(), c('%Y%m%d', '%h:%m'))`"
        runtime: shiny
        ---

        ```{r plt.suppVSauto.week.EB, out.width = '100%'}

        data <- data.frame(BclgID = c('US','US','US','UK','UK','UK','DE','DE','DE'), 
                           week = as.Date(c('2020-06-28', '2020-06-21', '2020-06-14', '2020-06-28', '2020-06-21', '2020-06-14', '2020-06-28', '2020-06-21', '2020-06-14')), 
                           value = c(1,2,3,1,2,2,3,1,1))

        shinyApp(
  
          ui <- fluidPage(
  
          radioButtons(inputId = 'BclgID', label = 'Catalog', 
                       choices = type.convert(unique(plot$BclgID), as.is = TRUE),
                       selected = 'US'),
          plotOutput("myplot")
          ),


          server <- function(input, output) {
  
            mychoice <- reactive({
              subset(data, BclgID %in% input$BclgID)
            })
  
            output$myplot <- renderPlot({
              if (length(row.names(mychoice())) == 0) {
                  print("Values are not available")
            }
              p <- ggplot(mychoice(), aes(x=as.factor(week), y=value)) + 
                geom_line() + 
                labs(title = "test",
                     subtitle = "",
                     y="Value", 
                     x ="Date") +
                theme(axis.text.x = element_text(angle = 90)) +
                facet_wrap( ~ BclgID, ncol = 1)
              print(p)
  
            }, height = 450, width = 450)
  
        }
  
        )

Upvotes: 5

Views: 1501

Answers (1)

samsonjm
samsonjm

Reputation: 270

EDIT: Coming back another year later in case anyone still finds this useful. Having done some more work with both shiny and rmarkdown so I understand both better, there isn't really a reason to use them together. Rmarkdown's advantage is being able to come up with a somewhat static pdf that is readable, where shiny is dynamic and requires input. While my answer below works, if you're using shiny for a GUI, consider removing the rmarkdown portion of what you are writing. It probably isn't adding much/anything, and trying to use the two together can cause headaches.

Original answer below:

I see this was asked a long time ago, so you've probably moved on, but I ran into the same problem and this came up first, so I'll answer it in case anyone else runs into this problem.

I found the answer on this page: https://community.rstudio.com/t/embedding-shiny-with-inline-not-rendering-with-html-output/41175

The short of it is shiny documents need to be run and not rendered. Rather than calling:

>rmarkdown::render("filename.rmd")

we need to call:

>rmarkdown::run("filename.rmd")

If you are inside Rstudio, it seems the "knit" function changes from render to run when using shiny in RMD.

Upvotes: 2

Related Questions