在Shiny UI

时间:2016-01-15 08:32:19

标签: r shiny

我正在使用shiny::updateSliderInput来更新滑块的标签。我希望滑块的标签使用希腊字符xi(ξ)和下标进行渲染。下标是updateSliderInput调用的目标。

我在没有updateSliderInput调用的情况下成功生成了标签,但正确使用withMathJax()调用标签更新并没有达到我想要的效果。

此问题的闪亮应用程序的可重现示例是:

library(shiny)
shinyApp(ui = shinyUI(fluidPage(sliderInput("order", withMathJax("Order, \\(k\\)"), min = 3, max = 7, value = 4, step = 1), 
                                sliderInput("iknots", "iKnots", min = 0, max = 10, value = 5, step = 1),
                                sliderInput("xi1", withMathJax(), min = 0, max = 10, value = 1, step = 0.1))), 
          server = shinyServer(function(input, output, clientData, session) { 
                               observe({
                                 k <- as.integer(input$order)
                                 l <- as.integer(input$iknots) 
                                 updateSliderInput(session, "xi1", label = paste0("\\(\\xi_{", k + l, "}\\)"))
                               }) 
                        }))

在浏览器中初次加载应用程序时,我们有一个理想的标签,ξ 9 是正确的。

enter image description here

调整前两个滑块中的任何一个后,第三个滑块的标签无法按预期呈现。

enter image description here

我尝试在withMathJax的{​​{1}}参数中使用label但是有不良标签。将上面的updateSliderInput行更改为

updateSliderInput

并将updateSliderInput(session, "xi1", label = withMathJax(paste0("\\(\\xi_{", k + l, "}\\)"))) 设置为使sliderInputlabel = withMathJax()成为

的初始标签

enter image description here

并更新

的标签

enter image description here

如何在滑块标签中正确更新ξ上的下标?

1 个答案:

答案 0 :(得分:1)

您可能需要使用renderUIuiOutput来创建最后一个滑块,否则在更新标签时不会调用用于显示MathJax的javascript。

你可以这样做:

library(shiny)
shinyApp(ui = shinyUI(fluidPage(sliderInput("order", withMathJax("Order, \\(k\\)"), min = 3, max = 7, value = 4, step = 1), 
                                sliderInput("iknots", "iKnots", min = 0, max = 10, value = 5, step = 1),
                                uiOutput("lastSlider"))), 

         server = shinyServer(function(input, output, clientData, session) { 
           output$lastSlider<- renderUI({
             k <- as.integer(input$order)
             l <- as.integer(input$iknots) 
             sliderInput("xi1",label =  withMathJax(paste0("\\(\\xi_{", k + l, "}\\)")), min = 0, max = 10, step = 0.1,value=input$xi1)
           })

         }))