动态创建的滑块中的数学表达式

时间:2019-01-29 14:08:25

标签: r shiny

我正在尝试将一些数学表达式包含在滑块的标签中。当滑块为静态时,它可以正常工作。但是,当通过renderUI创建滑块时,它不起作用。

下面的代码可以正常工作,直到更改要创建的滑块数量。此时,数学模式将停止在所有动态创建的滑块中起作用。但是,数学模式仍然适用于静态滑块和其他数学文本。

library(shiny)

ui <- fluidPage(
  titlePanel("Sliders..."),
  withMathJax(),
  mainPanel(
    # Static slider
    sliderInput(inputId = "slider_alpha",
                label = "\\(\\alpha\\) slider",
                min = 0,
                max = 50,
                value = 30),
    # Text with math mode
    uiOutput("text"),
    # Number of sliders
    numericInput(inputId = "number_of_sliders",
                 label = "Number of sliders",
                 min = 1,
                 max = 3,
                 value = 1,
                 step = 1),
    # Dynamically created sliders
    uiOutput("slider")
  ))

server <- function(input, output) {
  output$text <- renderUI({
    HTML("\\(\\alpha + \\beta = \\gamma\\)")
  })

  output$slider <- renderUI({
    num <- input$number_of_sliders
    sliders <- tagList(
      tags$div(style = "display: inline-block; vertical-align: middle;",
               sliderInput("slider_beta", "\\(\\beta\\) slider",
                           value = 5, min = 0, max = 50, step = 1)),
      tags$div(style = "display: inline-block; vertical-align: middle;",
               sliderInput("slider_gamma", "\\(\\gamma\\) slider",
                           value = 10, min = 0, max = 50, step = 1)),
      tags$div(style = "display: inline-block; vertical-align: middle;",
               sliderInput("slider_gamma", "\\(\\delta\\) slider",
                           value = 10, min = 0, max = 50, step = 1))
    )
    sliders[1:num]
  })

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

根据withMathJax()的描述,您应该每次都使用此功能,而不仅仅是在使用uiOutput()的开始时调用此功能。

  

此函数将MathJax添加到页面并排版数学   内容中的表达式(如果找到)...。仅需调用   在应用中一次,除非在页面显示后呈现内容   已加载,例如通过renderUI,在这种情况下,我们必须显式调用它   每次,我们都会在输出中编写数学表达式。

如果在服务器部分的第一个withMathJax中添加sliderInput(),则似乎可以正常工作。

tags$div(style = "display: inline-block; vertical-align: middle;",
         sliderInput("slider_beta", withMathJax("\\(\\beta\\) slider"),
                     value = 5, min = 0, max = 50, step = 1))

enter image description here