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
。此外,您使用observeEvent
和reactive
的方式似乎有点不对劲。 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公式的主要内容,如果未能解决你的问题,请参考以下文章
CKEDITOR mathjax公式在jquery中未正确加载