Как передать переменную с сервера на пользовательский интерфейс и отобразить в блестящем шаблоне? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь прочитать значение из кадра данных, которое в конечном итоге будет обновляться каждые 2 минуты. На данный момент я изо всех сил пытаюсь получить данные для пользовательского интерфейса в блестящей через htmltemplate.

Я пробовал различные реализации render и outputUI, но, похоже, не могу понять.

library(shiny)

test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)

ui <- htmlTemplate(
  text_ = '
  <html>
  <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="application/shiny-singletons"></script>
  <script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
  </head>
  <body>
  <p style="color:red">{{outputUI("score_value")}}</p>
  </body>
  </html>'
)
server <- function(input, output, session) {
  output$score_value <- renderUI(
    {mean(my_dataframe$score)}
  )
}
shinyApp(ui, server)

То, что я хотел бы видеть, - это среднее значение этих 4 чисел, отображаемых в пользовательском интерфейсе.

Текущий код помещает мой объект в div, и это не то, что я ищу

  <html>
  <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="application/shiny-singletons"></script>
  <script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
  </head>
  <body>
  <p style="color:red">
<div id="score_value" class="shiny-html-output"></div>
</p>
  </body>
  </html>

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Сначала код, не запускается на моей машине, просто серая страница ... странно.

Второй outputUI - недопустимая функция, какую блестящую версию вы используете? Я использую: uiOutput()

В-третьих, ваш вывод выглядит правильно. Я думаю, вы должны сообщить renderUI, что он должен содержать (элемент render), например.

renderUI({ tagList( renderText( mean( my_dataframe$score) ) ) })

EDIT: некоторые зависимости, где отсутствуют. Здесь добавлен полностью рабочий код с некоторыми зависимостями:

library(shiny)

test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)

ui <- htmlTemplate(
  text_ = '

    <html>
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <script type="application/shiny-singletons"></script>  
    <script type="application/html-dependencies">
    json2[2014.02.04];
  jquery[1.11.3];
  shiny[0.13];
  ionrangeslider[2.0.12];
  strftime[0.9.2]
  </script>
    <script src="shared/json2-min.js"></script>
    <script src="shared/jquery.min.js"></script>
    <link href="shared/shiny.css" rel="stylesheet"/>
    <script src="shared/shiny.min.js"></script>
    <link href="shared/ionrangeslider/css/ion.rangeSlider.css" 
  rel="stylesheet"/>
    <link href="shared/ionrangeslider/css/ion.rangeSlider.skinShiny.css" 
  rel="stylesheet"/>
    <script src="shared/ionrangeslider/js/ion.rangeSlider.min.js"></script>
    <script src="shared/strftime/strftime-min.js"></script>
    </head>
    <body>
    <p style="color:red">{{ uiOutput("score_value") }}</p>
    </body>
    </html>
'
)
server <- function(input, output, session) {
  output$score_value <- renderUI({
    tagList(
      renderText(
        mean(my_dataframe$score)
      )
    )
  })
}
shinyApp(ui = ui, server = server)
0 голосов
/ 10 января 2019

Первое, что пропускает ваш код, это {{headContent()}}

library(shiny)

test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)

ui <- htmlTemplate(
  text_ = '
  <html>
  <head> 
  {{headContent()}}
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="application/shiny-singletons"></script>
  <script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
  </head>
  <body>
  <div style="color:red">{{textOutput("score_value")}}</div>
  </body>
  </html>'
)
server <- function(input, output, session) {
  output$score_value <- renderText(
    {mean(my_dataframe$score)}
  )
}
shinyApp(ui, server)

Далее, поскольку вы просто визуализируете текстовое значение, используйте renderText и textOutput. Это работает нормально тогда.

На основании документации ,

headContent () должен быть размещен в разделе <head> HTML, если это полная HTML-страница (в отличие от компонента страницы, о котором мы поговорим позже). Это говорит Shiny, что различные Shiny Код заголовка должен быть включен здесь.

Кроме того, тег p заменен тегом div для отражаемого стиля.

0 голосов
/ 10 января 2019

Невозможно протестировать прямо сейчас, но вы пытались обернуть htmltemplate в функцию блестящей, например, так?

ui <- shinyUI(htmlTemplate(
  text_ = '
  <html>
  <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="application/shiny-singletons"></script>
  <script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
  </head>
  <body>
  <p style="color:red">{{renderUI("score_value")}}</p>
  </body>
  </html>'
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...