Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Include a javascript file in Shiny app

I need to include a js library into my Shiny app. Currently I use includeHTML to include the script directly into html codes. e.g.

includeHTML('URL.js') 

The browser will show "Not Found" when I try to browser the js file if I use tags$script, e.g.

http://127.0.0.1:7106/URL.js  tags$script(src = 'URL.js') 

Now I put URL.js in the same folder of ui.r and server.r.

Where I should store the URL.js file? Or are there other ways to include a js file?

Thanks for any suggestions.

like image 971
Bangyou Avatar asked May 12 '14 00:05

Bangyou


People also ask

Where do you put packages in the Shiny app?

Packages to load need to be declared at the start of the app. R file, at the server side of the app. R or alternatively at the modules file. At the modules, the libraries can be declared either outside of the fooUI and fooServer module functions or inside.

How do you read data to the Shiny app?

Your title asks about importing a data frame into shiny. That can be done by storing the data frame either as a binary file using the save() function or a csv file using write. csv() and having the shiny app read it in using load() for a binary file or read. csv() for a csv file.

Does jQuery use Shiny?

The jQuery framework is natively included in shiny. jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.


2 Answers

What you need to do is:

  1. create www folder in the same folder as server.R and ui.R
  2. put javascript file into www folder.
  3. put tags$head(tags$script(src="hoge.js")) in UI.

The folder looks like:

├── server.R ├── ui.R └── www     └── hoge.js 

The ui.R is something like

library(shiny) shinyUI(pageWithSidebar(   headerPanel("New Application"),   sidebarPanel(     sliderInput("obs",                  "Number of observations:",                  min = 1,                  max = 1000,                  value = 500)   ),   mainPanel(     plotOutput("distPlot"),     tags$head(tags$script(src="hoge.js"))   ) )) 

and server.R

library(shiny) shinyServer(function(input, output) {   output$distPlot <- renderPlot({     dist <- rnorm(input$obs)     hist(dist)   }) }) 

Note that these are templates generated by Rstudio.

Now head of html looks like:

<head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>   ... snip ...   <script src="shared/slider/js/jquery.slider.min.js"></script>   <script src="hoge.js"></script> </head> 
like image 91
kohske Avatar answered Sep 19 '22 22:09

kohske


Another way is to use:

includeScript("mapManipulator.js"), 
like image 43
Stanislav Avatar answered Sep 20 '22 22:09

Stanislav