gpt4 book ai didi

javascript - 将 onRender() 函数中创建的对象保存在 htmlWidgets 中

转载 作者:行者123 更新时间:2023-11-28 04:49:48 24 4
gpt4 key购买 nike

我正在 Shiny 应用程序中使用 htmlWidgets 包中的 onRender() 函数。我试图保存在给定的 onRender() 函数调用中创建的某些对象,以便可以在给定的 onRender() 函数调用之外使用它们。

下面是我的 MWE。我在 onRender() 函数中创建一个名为 val2 的对象,它只是 slider 输入值乘以 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)

最佳答案

这就是这样做的。我修改了您的示例以使其更具交互性。然后我使用 javascript 将“val2”值存储两次,一次存储在 h3 标记中(我首先开始工作),然后作为响应式(Reactive) 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)

这是工作应用程序的屏幕截图:

enter image description here

值得一读的相关帖子是:Sending Shiny data from client to server

关于javascript - 将 onRender() 函数中创建的对象保存在 htmlWidgets 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com