如何将变量从服务器传递到ui并显示在闪亮的模板中?

时间:2019-01-09 23:50:47

标签: r shiny

我正在尝试从数据帧中读取一个值,该值最终将每2分钟更新一次。现在,我正在努力通过htmltemplate将数据以闪亮的方式传递到UI。

我尝试了render和outputUI的各种实现,但似乎无法弄清楚。

$

我想看到的是UI中呈现的这4个数字的平均值。

当前代码将我的对象放入div中,这不是我想要的

^([1-9][0-9]{2,6}|99)$

3 个答案:

答案 0 :(得分:1)

首先,代码没有在我的机器上运行,只是灰页...很奇怪。

第二个outputUI无效,您使用的是哪个闪亮版本? 我用: uiOutput()

第三,我认为您的输出看起来正确,您已经告诉renderUI它应包含的内容(一个render元素),例如

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

编辑: 一些缺少的依赖项。这里添加了具有某些依赖项的完整工作代码:

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)

答案 1 :(得分:1)

您的代码错过的第一件事是{{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)

接下来,因为您只是在渲染文本值,所以使用renderTexttextOutput。这样就可以了。

基于documentation

  

headContent()必须放置在HTML的<head>部分中,如果   这是一个完整的HTML页面(与页面的组成部分相对,   我们将在后面讨论)。这告诉Shiny,各种Shiny   标头代码应包含在此处。

此外,p标记被div标记替换,以体现样式。

答案 2 :(得分:0)

目前无法测试,但是您是否尝试过将HTMLTemplate包裹在类似的Shinuiui函数中?

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>'
))