我在Shiny应用程序中使用htmlWidgets包中的onRender()函数。我试图保存我在给定的onRender()函数调用中创建的某些对象,以便它们可以在给定的onRender()函数调用之外使用。
以下是我的MWE。我在onRender()函数中创建一个名为val2的对象,它只是滑块输入值乘以2.我可以保存val2对象,以便以后可以在onRender()函数之外使用吗? (我意识到我不需要使用onRender()函数在这个过度简化的示例中创建val2对象,但我试图保持示例简单。)
感谢您的任何建议!
library(plotly)
library(htmlwidgets)
library(shiny)
myPlot <- qplot(data=mtcars, mpg, cyl)
gMyPlot <- ggplotly(myPlot)
ui <- shinyUI(fluidPage(
sliderInput("ci", "Value:", min = 0, max = 1, value=0.95, step=0.01),
plotlyOutput("myTest")
))
server <- shinyServer(function(input, output) {
ci <- reactive(input$ci)
output$myTest <- renderPlotly(gMyPlot %>% onRender("
function(el, x, data) {
val2 = data * 2
console.log(val2)
}", data=ci()))})
shinyApp(ui, server)
答案 0 :(得分:0)
就是这样。我修改了你的例子,使它更具交互性。然后我存储&#34; val2&#34;使用javascript两次,一次在h3标签中(我先工作),然后作为反应input
列表的一个元素(当然更有用)。请注意,这似乎不是非常有效,因为值在服务器和客户端之间来回传递。
以下是代码:
library(plotly)
library(htmlwidgets)
library(shiny)
ui <- shinyUI(fluidPage(
tags$h3('',class ='val2'),
sliderInput("ci", "Value:", min = 0, max = 34, value=34, step=1),
plotlyOutput("myPlot"),
textOutput("outval2")
))
server <- shinyServer(function(input, output) {
ci <- reactive(input$ci)
output$myPlot <- renderPlotly({
mdf <- mtcars %>% filter(mpg<ci())
myPlot <- qplot(data=mdf, mpg, cyl)
ggplotly(myPlot) %>% onRender("function(el, x, data) {
val2 = data * 2
console.log(val2)
$('h3.val2').text('val2:'+val2);
Shiny.onInputChange('val2', val2);
}", data=ci())
})
output$outval2 <- renderPrint({sprintf("The calculated value is:%d",input$val2)})
}
)
shinyApp(ui, server)
以下是工作应用的屏幕截图:
值得一读的相关帖子是:Sending Shiny data from client to server