【问题标题】:Dynamic update of a label withMathJax in Shiny UI在 Shiny UI 中使用 MathJax 动态更新标签
【发布时间】:2016-01-15 18:50:00
【问题描述】:

我正在使用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 是正确的。

调整前两个滑块之一后,第三个滑块的标签未按预期呈现。

我尝试在updateSliderInputlabel 参数中使用withMathJax,但出现了不受欢迎的标签。将上面的 updateSliderInput 行更改为

updateSliderInput(session, "xi1", label = withMathJax(paste0("\\(\\xi_{", k + l, "}\\)")))

并将sliderInput 设置为label = withMathJax()label = "" 会导致初始标签为

和更新的标签

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

【问题讨论】:

    标签: r shiny


    【解决方案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)
               })
    
             }))
    

    【讨论】:

    • 动态更新数学输出时有没有办法让它不“卡顿”?我看到了一个解决方案here,有人建议在隐藏元素中渲染数学,然后将其与可见元素交换,但我并没有真正让它工作
    猜你喜欢
    • 2018-07-05
    • 2018-10-22
    • 2021-07-20
    • 2011-08-29
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多