web-dev-qa-db-ja.com

Shinyアプリにjavascriptファイルを含める

Shinyアプリにjsライブラリを含める必要があります。現在、私はincludeHTMLを使用して、スクリプトを直接HTMLコードに含めています。例えば.

includeHTML('URL.js')

Tags $ scriptを使用している場合、jsファイルをブラウザしようとすると、ブラウザに「Not Found」と表示されます。

http://127.0.0.1:7106/URL.js

tags$script(src = 'URL.js')

ここで、ui.rとserver.rの同じフォルダーにURL.jsを配置します。

URL.jsファイルを保存する場所または、jsファイルを含める他の方法はありますか?

提案をありがとう。

33
Bangyou

あなたがする必要があるのは:

  1. _server.R_および_ui.R_と同じフォルダーにwwwフォルダーを作成します
  2. javaScriptファイルをwwwフォルダーに入れます。
  3. uIにtags$head(tags$script(src="hoge.js"))を配置します。

フォルダーは次のようになります。

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

_ui.R_は次のようなものです

_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"))
  )
))
_

および_server.R_

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

これらはRstudioによって生成されたテンプレートであることに注意してください。

Htmlのheadは次のようになります。

_<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>
_
50
kohske

別の方法は以下を使用することです:

includeScript("mapManipulator.js"),
8
Stanislav
 └──shiny
    ├── server.R
    ├── ui.R
    └── www
        ├── stylesheet.css
        └── js
             └── hoge.js

ui.R

どちらかが機能します

1. tags$head(HTML("<script type='text/javascript' src='js/hoge.js'></script>"))

2. HTML('<head>
              <link rel="stylesheet" type="text/css" href="stylesheet.css">
              <script type="text/javascript" src="js/hoge.js"></script>
          </head>')
5
Sathish

まだ説明されていないもう1つのオプションは、ui.Rファイルを完全に削除してから、全体をカスタムHTMLファイルとしてコーディングすることです。詳細はこちら https://shiny.rstudio.com/articles/html-ui.html

この記事では、デフォルトのHTMLフォーム要素がserver.Rの入力として自動的に使用されますが、このガイドで光沢のあるカスタム入力(または出力)要素を作成することもできます https://shiny.rstudio.com/ articles/building-inputs.html

2
Colin D

私の好ましい方法はこのようなものです:

ui.R:

    extendShinyjs(script = "app.js", functions = c("alerta")),

app.js:

shinyjs.alerta = function(text){
  alert(text);
}

server.R

  js$alerta("alerta alerta antifascista")

次のようなコードを含めることもできます。

ライブラリのインポート後のui.R:

jsCode <- "shinyjs.alerta = function(text){alert(text);}"

fluidPage内のui.R:

extendShinyjs(text = jsCode, functions = c("alerta")),

server.Rからの呼び出しは同じです

1
ill