Shiny中的动态mathjax公式

Posted

技术标签:

【中文标题】Shiny中的动态mathjax公式【英文标题】:Dynamic mathjax formula in Shiny 【发布时间】:2018-07-05 16:43:46 【问题描述】:

我正在尝试根据输入动态更改闪亮应用程序中的公式。

目前我可以使用默认的起始设置构建公式,但是每当我更改输入时,公式都会返回到原始的 mathjax 输入,而不是显示公式。

是否可以保持公式动态但保持其呈现为公式?

请看下面的代码:

library(shiny)

ui <- fluidPage(
  fluidPage(
    titlePanel("T-test example"),
    fluidRow(
      column(3, wellPanel(
        sliderInput("mean1", "Group 1 mean:", 
                    min = 10, max = 1000, value = 200,
                    step = 10),
        sliderInput("sd1", "Group 1 variation:", 
                    min = 10, max = 100, value = 50,
                    step = 10),
        sliderInput("mean2", "Group 2 mean:", 
                    min = 10, max = 1000, value = 200,
                    step = 10),
        sliderInput("sd2", "Group 2 variation:", 
                    min = 10, max = 100, value = 50,
                    step = 10)
      )),
      column(6,
             plotOutput("plot1", width = 400, height = 300),
             br(),
             p(
               withMathJax(
                 "$$t = \\frac\\barx_1 - \\barx_2\\sqrt\\fracs_1^2N_1+\\fracs_2^2N_2$$"
                 )),
             textOutput("formula")

      )
    )
  )
)

server <- function(input, output, session) 

  output$plot1 <- renderPlot(
    x = rnorm(500, mean = input$mean1,
              sd = 20)
    y = rnorm(500, mean = input$mean2,
              sd = 20)
    boxplot(x,y)
  )

  output$formula <- reactive(
          str = sprintf("$$t = \\frac%d - %d\\sqrt\\frac%dN_1+\\frac%dN_2$$", 
                input$mean1, 
                input$mean2,
                input$sd1,
                input$sd2
                )
        str
  )

  observeEvent(input$change, 
                
              output$formula <- renderText( 
                formula()
  )
  )



shinyApp(ui, server)

【问题讨论】:

【参考方案1】:

一种可能的选择是不使用renderText,而是使用renderUI。此外,您使用observeEventreactive 的方式似乎有点不对劲。 reactive 不需要 observeEvent 来更新,因为如果其中一个输入自动更改,它就会失效。如果您想在某些事情发生变化时产生更大的影响,可以使用reactiveVal 而不是reactive

无论如何,这是一个可行的示例,希望对您有所帮助!

library(shiny)

ui <- fluidPage(
  fluidPage(
    titlePanel("T-test example"),
    fluidRow(
      column(3, wellPanel(
        sliderInput("mean1", "Group 1 mean:", 
                    min = 10, max = 1000, value = 200,
                    step = 10),
        sliderInput("sd1", "Group 1 variation:", 
                    min = 10, max = 100, value = 50,
                    step = 10),
        sliderInput("mean2", "Group 2 mean:", 
                    min = 10, max = 1000, value = 200,
                    step = 10),
        sliderInput("sd2", "Group 2 variation:", 
                    min = 10, max = 100, value = 50,
                    step = 10)
      )),
      column(6,
             plotOutput("plot1", width = 400, height = 300),
             br(),
             p(
               withMathJax(
                 "$$t = \\frac\\barx_1 - \\barx_2\\sqrt\\fracs_1^2N_1+\\fracs_2^2N_2$$"
               )),
             uiOutput("formula")

      )
    )
  )
)

server <- function(input, output, session) 

  output$plot1 <- renderPlot(
    x = rnorm(500, mean = input$mean1,
              sd = 20)
    y = rnorm(500, mean = input$mean2,
              sd = 20)
    boxplot(x,y)
  )

  output$formula <- renderUI( 
    p(
      withMathJax(sprintf("$$t = \\frac%d - %d\\sqrt\\frac%dN_1+\\frac%dN_2$$", 
                          input$mean1, 
                          input$mean2,
                          input$sd1,
                          input$sd2
      )))
  )




shinyApp(ui, server)

【讨论】:

以上是关于Shiny中的动态mathjax公式的主要内容,如果未能解决你的问题,请参考以下文章

在Hexo中渲染MathJax数学公式

CKEDITOR mathjax公式在jquery中未正确加载

anki2.1中使用latex,使用 MathJax 渲染latex格式的数学公式,化学公式

Mathjax公式教程

Mathjax公式教程

Mathjax公式教程